我在Ubuntu 14.04的Docker容器中有一个Ruby on Rails应用。我使用Dokku设置了部署,但是不确定如何使我的Cron作业正常工作。
当前,我正在使用whenever gem,它允许我做一些简单的事情,例如:
every 5.minutes do
runner 'MyModel.run_something'
end
问题是,我认为每次我使用git push dokku master
进行部署时,它都会重置容器并将其设置回默认值,从而删除我的所有cron计划。
因此,我认为cron调度可能需要在容器外部,而应在VM级别。
无论我做什么,我目前都看不到任何cron作业正在运行。这是当我在ssh'd时运行crontab -l
时发生的情况:
root@dashboard:~# crontab -l
no crontab for root
我对容器虚拟化还很陌生,因此,如果我跳过了其中的关键部分,我很抱歉,但是我很沮丧。
让我永远做这件事-最终通过crontabs调用rails命令。我还在数字海洋服务器上用ubuntu在dokku上上传了Rails应用程序。试图让“每时每刻”宝石都能正常工作……事实并非如此。 whenever -i
不起作用。
[只要不为dokku环境实际创建任何新的crontab。不过,这对于弄清Cron语法很有用!
所以这就是我安排的任务在dokku中工作的方式:
sudo crontab -e
手动创建自己的crontab,将在vi / vim中打开它您可以使用sudo crontab -r
删除它,或使用sudo crontab -l
查看当前的crontabs
下面的代码将每1分钟执行一次。
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
* * * * * /bin/bash -c 'dokku run appname rails r MyModel.run_something'
使您的环境变量等于您在env
命令中拥有的环境变量
grep CRON /var/log/syslog
查看故障排除的输出日志。您可能必须通过sudo apt-get install postfix
安装postfix,以便Cron发送错误邮件通知,否则您可能会从系统日志中收到“(CRON) info (No MTA installed, discarding output)”
错误。
cat /var/mail/root
查看从Cron收到的邮件-如果cronjob无法正常工作,则说明错误。
希望这很有帮助。那至少让我度过了难关!
[可能因为cron守护程序未在您的Docker / Dokku容器中运行而无法运行时。 Docker将使用only run the processes it is told to或CMD
指令或在由其中一个指令执行的脚本中将RUN
。
[Dokuku的人已经明确地说了cron is not supported in Dokku,尽管没有说为什么。在cron
,Dokku和Dokku Buildstep仓库中快速搜索base image不会显示任何结果,因此看来Dokku在构建/运行应用程序时从不启动cron服务。
他们建议的解决方案是在主机上设置cron作业(如您所知),使用web_based scheduling service或尝试Heroku的Scheduler。