[何时将VM与Docker和Dokku一起使用Cron作业

问题描述 投票:5回答:2

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

我对容器虚拟化还很陌生,因此,如果我跳过了其中的关键部分,我很抱歉,但是我很沮丧。

ruby-on-rails cron docker whenever dokku
2个回答
9
投票

让我永远做这件事-最终通过crontabs调用rails命令。我还在数字海洋服务器上用ubuntu在dokku上上传了Rails应用程序。试图让“每时每刻”宝石都能正常工作……事实并非如此。 whenever -i不起作用。

[只要不为dokku环境实际创建任何新的crontab。不过,这对于弄清Cron语法很有用!

所以这就是我安排的任务在dokku中工作的方式:

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

您可以使用sudo crontab -r删除它,或使用sudo crontab -l查看当前的crontabs

  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'

使您的环境变量等于您在env命令中拥有的环境变量

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

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

希望这很有帮助。那至少让我度过了难关!


1
投票

[可能因为cron守护程序未在您的Docker / Dokku容器中运行而无法运行时。 Docker将使用only run the processes it is told toCMD指令或在由其中一个指令执行的脚本中将RUN

[Dokuku的人已经明确地说了cron is not supported in Dokku,尽管没有说为什么。在cronDokku和Dokku Buildstep仓库中快速搜索base image不会显示任何结果,因此看来Dokku在构建/运行应用程序时从不启动cron服务。

他们建议的解决方案是在主机上设置cron作业(如您所知),使用web_based scheduling service或尝试Heroku的Scheduler

© www.soinside.com 2019 - 2024. All rights reserved.