我在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以下代码将每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/