我在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
我对容器虚拟化很陌生,所以如果我跳过了关键部分,我会道歉但是我很难过。
答案 0 :(得分:8)
让我永远工作这个 - 最后通过crontabs调用rails命令。我还在数字海洋服务器上使用ubuntu在dokku上上传了一个rails应用程序。试图让每当宝石工作......它只是没有。 whenever -i
不起作用。
每当实际上没有为dokku环境创建任何新的crontabs。不过要弄清楚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发送错误的邮件通知,否则您可能会从syslog中收到“(CRON) info (No MTA installed, discarding output)”
错误。
cat /var/mail/root
查看从Cron收到的邮件 - 如果cronjob无法正常工作则说明错误。
希望这很有帮助。这至少让我了解了!
答案 1 :(得分:1)
每当可能无法工作,因为cron守护程序没有在Docker / Dokku容器中运行。 Docker将only run the processes it is told to使用CMD
或RUN
指令或其中一个指令执行的脚本。
Dokku的家伙明确地说过cron is not supported in Dokku,虽然没有说明原因。在Dokku,Buildstep和Dokku base image回购中快速搜索cron
不会产生任何结果,因此似乎Dokku从未启动过cron服务构建/运行应用程序。
他们建议的解决方案是在主机上设置cron作业(正如您已经想到的那样),使用web_based scheduling service或尝试Heroku的Scheduler。