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工作…

  1. 通过sudo crontab -e手动创build你自己的crontab,它将在vi / vim中打开它

您可以使用sudo crontab -r将其删除,或者使用sudo crontab -l查看当前的crontab

  1. 将下面的代码添加到新的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

  1. grep CRON /var/log/syslog查看输出日志进行故障排除。 您可能需要通过sudo apt-get install postfix ,以便Cron发送错误邮件通知,否则您可能会从syslog中获得“(CRON) info (No MTA installed, discarding output)”错误。

  2. 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的调度程序 。