ruby-on-rails 使用Whenever与VM、Docker和Dokku的Cron作业

zmeyuzjn  于 2023-08-08  发布在  Ruby
关注(0)|答案(3)|浏览(122)

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


我对容器虚拟化还很陌生,所以如果我跳过了其中的关键部分,我很抱歉,但我被难倒了。

zf9nrax1

zf9nrax11#

我花了很长时间才完成这一个-最终通过crontabs调用Rails命令。我还在dokku上传了一个rails应用程序,并在digital ocean服务器上使用ubuntu。试着让Everytime宝石工作...就是没关系whenever -i不工作。
Whenever实际上并没有为dokku环境创建任何新的crontab。不过,这对计算Cron语法很有帮助!
这就是我如何在dokku中安排任务的方法:
1.通过sudo crontab -e手动创建您自己的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'

字符串
使环境变量与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无法工作则说明错误。
    希望能帮上忙。至少这是我撑过的!
bjg7j2ky

bjg7j2ky2#

Whenever可能不工作,因为cron守护进程没有在Docker/Dokku容器中运行。Docker将使用CMDRUN指令,或者使用其中一个指令执行的脚本来执行only run the processes it is told to
Dokku的家伙明确地说了cron is not supported in Dokku,虽然没有说为什么。在DokkuBuildstep和Dokku base image中快速搜索cron不会有任何结果,所以Dokku在构建/运行应用程序时似乎从来没有启动cron服务。
他们建议的解决方案是在主机上设置cron作业(正如您已经知道的那样),使用web_based scheduling service,或者尝试Heroku的Scheduler

0yycz8jy

0yycz8jy3#

如果有人遇到这一点,现在dokku有了自己的任务调度方法。请参阅此处的文档:https://dokku.com/docs/processes/scheduled-cron-tasks/

相关问题