我在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时运行crontab -l时发生的情况:
root@dashboard:~# crontab -l
no crontab for root

我对容器虚拟化还很陌生,所以如果我跳过了其中的关键部分,我深表歉意,但我很沮丧。

最佳答案

让我永远地努力解决这一问题-最终通过crontabs调用了rails命令。我还在 digital ocean 服务器上的ubuntu上,在dokku上上传了一个rails应用程序。试图让“每时每刻” gem 都能正常工作……事实并非如此。 whenever -i不起作用。

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

因此,这就是我如何使预定任务在dokku中工作的方式:

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

  • 您可以使用sudo crontab -r删除它,也可以使用sudo crontab -l查看当前的crontab
  • 将以下代码添加到新的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命令中的环境变量
  • grep CRON /var/log/syslog来查看输出日志以进行故障排除。您可能必须通过sudo apt-get install postfix安装postfix,以便Cron发送错误邮件通知,否则您可能会从系统日志中收到“(CRON) info (No MTA installed, discarding output)”错误。
  • cat /var/mail/root可查看从Cron收到的邮件-如果cronjob无法正常工作,则说明错误。

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

    关于ruby-on-rails - 将Whenever与VM,Docker和Dokku一起使用以进行Cron作业,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26739621/

    10-16 18:23