Cron作业使用Whenever VM,Docker& Dokku

时间:2014-11-04 16:03:16

标签: ruby-on-rails cron docker whenever dokku

我在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

我对容器虚拟化很陌生,所以如果我跳过了关键部分,我会道歉但是我很难过。

2 个答案:

答案 0 :(得分:8)

让我永远工作这个 - 最后通过crontabs调用rails命令。我还在数字海洋服务器上使用ubuntu在dokku上上传了一个rails应用程序。试图让每当宝石工作......它只是没有。 whenever -i不起作用。

每当实际上没有为dokku环境创建任何新的crontabs。不过要弄清楚Cron的语法是好的!

所以这就是我如何让计划任务在dokku中工作......

  1. 通过sudo crontab -e手动创建自己的crontab,这将在vi / vim中打开
  2. 您可以使用sudo crontab -r删除它,或sudo crontab -l查看当前的crontabs

    1. 将以下代码添加到新的crontab
    2. 以下代码将每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命令

      中的变量
      1. grep CRON /var/log/syslog查看故障排除的输出日志。您可能必须通过sudo apt-get install postfix安装postfix,以便Cron发送错误的邮件通知,否则您可能会从syslog中收到“(CRON) info (No MTA installed, discarding output)”错误。

      2. cat /var/mail/root查看从Cron收到的邮件 - 如果cronjob无法正常工作则说明错误。

      3. 希望这很有帮助。这至少让我了解了!

答案 1 :(得分:1)

每当可能无法工作,因为cron守护程序没有在Docker / Dokku容器中运行。 Docker将only run the processes it is told to使用CMDRUN指令或其中一个指令执行的脚本。

Dokku的家伙明确地说过cron is not supported in Dokku,虽然没有说明原因。在DokkuBuildstep和Dokku base image回购中快速搜索cron不会产生任何结果,因此似乎Dokku从未启动过cron服务构建/运行应用程序。

他们建议的解决方案是在主机上设置cron作业(正如您已经想到的那样),使用web_based scheduling service或尝试Heroku的Scheduler