Cron作业使用Whenever VM,Docker和Dokku

Ant*_*ony 5 cron ruby-on-rails whenever docker dokku

我在Ubuntu 14.04上的Docker容器中有一个Ruby on Rails应用程序.我使用Dokku设置部署,但我不确定如何让我的cron作业正常工作.

目前我正在使用every gem,它允许我做一些简单的事情:

every 5.minutes do
  runner 'MyModel.run_something'
end
Run Code Online (Sandbox Code Playgroud)

问题是我认为每次使用git push dokku master它部署时都会重置容器并将其设置回默认设置,从而删除所有我的cron时间表.

所以我想也许cron调度需要在容器外部而在VM级别.

无论我做什么,我目前都没有看到任何cron工作正在运行.这是当我crontab -l在ssh'd 时运行时发生的事情:

root@dashboard:~# crontab -l
no crontab for root
Run Code Online (Sandbox Code Playgroud)

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

小智 9

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

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

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

  1. 手动创建你自己的crontab,通过sudo crontab -e它可以在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'
Run Code Online (Sandbox Code Playgroud)

使您的环境变量等同于env命令中的变量

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

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

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