我在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
型
我对容器虚拟化还很陌生,所以如果我跳过了其中的关键部分,我很抱歉,但我被难倒了。
3条答案
按热度按时间zf9nrax11#
我花了很长时间才完成这一个-最终通过crontabs调用Rails命令。我还在dokku上传了一个rails应用程序,并在digital ocean服务器上使用ubuntu。试着让Everytime宝石工作...就是没关系
whenever -i
不工作。Whenever实际上并没有为dokku环境创建任何新的crontab。不过,这对计算Cron语法很有帮助!
这就是我如何在dokku中安排任务的方法:
1.通过
sudo crontab -e
手动创建您自己的crontab,这将在vi/vim中打开您可以使用
sudo crontab -r
删除它,或使用sudo crontab -l
查看当前crontab1.将以下代码添加到新的crontab中
下面的代码将每1分钟执行一次。
字符串
使环境变量与
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无法工作则说明错误。希望能帮上忙。至少这是我撑过的!
bjg7j2ky2#
Whenever可能不工作,因为cron守护进程没有在Docker/Dokku容器中运行。Docker将使用
CMD
或RUN
指令,或者使用其中一个指令执行的脚本来执行only run the processes it is told to。Dokku的家伙明确地说了cron is not supported in Dokku,虽然没有说为什么。在Dokku、Buildstep和Dokku base image中快速搜索
cron
不会有任何结果,所以Dokku在构建/运行应用程序时似乎从来没有启动cron服务。他们建议的解决方案是在主机上设置cron作业(正如您已经知道的那样),使用web_based scheduling service,或者尝试Heroku的Scheduler。
0yycz8jy3#
如果有人遇到这一点,现在dokku有了自己的任务调度方法。请参阅此处的文档:https://dokku.com/docs/processes/scheduled-cron-tasks/