Cron作业使用VM,Docker和Dokku
我在Ubuntu 14.04的Docker容器中有一个Ruby on Rails应用程序。 我使用Dokku设置了部署,但是我不确定如何让我的cron作业正常工作。
目前我使用的是每当gem ,让我做一些简单的事情,如:
every 5.minutes do runner 'MyModel.run_something' end
问题是我认为每次我使用git push dokku master
部署时,它会重置容器并将其设置为默认值,从而删除所有的cron时间表。
那么我想也许cron调度需要在容器之外,而在虚拟机级别。
我目前没有看到任何cron作业运行,不pipe我做什么。 以下是我在ssh中运行crontab -l
时发生的情况:
root@dashboard:~# crontab -l no crontab for root
我对容器虚拟化相当陌生,所以我很抱歉,如果我跳过了这个关键部分,但我是一个难倒。
让我永远工作这一个 – 结束了通过crontabs调用rails命令。 我也有一个轨道上的应用程序与dbuntu上的数字海洋服务器上的Ubuntu的。 试图得到每当gem工作…它只是没有。 whenever -i
不工作。
每当实际上没有为dokku环境创build任何新的crontabs。 尽pipe搞清楚Cron语法是很好的!
所以这就是我如何得到预定的任务在dokku工作…
- 通过
sudo crontab -e
手动创build你自己的crontab,它将在vi / vim中打开它
您可以使用sudo crontab -r
将其删除,或者使用sudo crontab -l
查看当前的crontab
- 将下面的代码添加到新的crontab
下面的代码将每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'
让你的环境variables等同于你在env
命令中的环境variables
-
grep CRON /var/log/syslog
查看输出日志进行故障排除。 您可能需要通过sudo apt-get install postfix
,以便Cron发送错误邮件通知,否则您可能会从syslog中获得“(CRON) info (No MTA installed, discarding output)”
错误。 -
cat /var/mail/root
来查看从Cron收到的邮件 – 如果cronjob失败,说明错误。
希望这是有帮助的。 那是至less让我通过了!
只要可能不工作,因为cron守护程序没有在您的Docker / Dokku容器中运行。 Docker 只会运行它被告知的进程 ,使用CMD
或者RUN
指令,或者用这些指令之一执行的脚本。
Dokku家伙明确表示, Dokku不支持 cron,尽pipe不知道为什么。 在Dokku , Buildstep和Dokku 基础镜像 仓库中快速searchcron
不会产生任何结果,因此Dokku似乎是在构build/运行应用程序时从不启动cron服务的情况。
他们build议的解决scheme是在主机上设置cron作业(如你已经想到的),使用基于web的调度服务 ,或者尝试Heroku的调度程序 。