堆栈:
的Apache2
Rails 2.3.8
RedHat Linux
Ruby Enterprise 1.8.7
在我的应用用户的crontab中获得了以下rake任务,这意味着每15分钟将记录拉入数据库表:
*/15 * * * * app_user cd /var/www/apps/my_app/current/ && rake thing:do_stuff RAILS_ENV=production
我可以看到cron守护程序在cron日志中运行此任务,但它应该将记录拉入的数据库表不会更改。当我在/ var / www / apps / my_app / current目录中手动运行它时,此任务正常运行,并按照我的预期将记录拉入表中。
我在crontab中重置了PATH变量以反映使用REE,认为默认路径可能与/ opt / ruby-enterprise不一致...
如何让这个rake任务实际上与cron一起运行?
答案 0 :(得分:10)
0,15,30,45 * * * * /bin/bash -l -c 'cd /var/www/apps/my_app/current && RAILS_ENV=production bundle exec rake thing:do_stuff --silent'
答案 1 :(得分:8)
尝试使用完整路径来搜索二进制文件(在控制台which rake
中运行,并用完整路径替换rake)。
例如,如果which rake
返回以下路径:
/Users/bob/.rvm/gems/ruby-1.9.3-p194/bin/rake
您应该使用以下命令来运行rake任务:
/Users/bob/.rvm/bin/rvm all do bundle exec rake allocator:snapshot
我更喜欢ruby中的cron作业的宝石
如何检测cron中的任务是否失败?失败时,cron尝试发送电子邮件。因此,您可以配置postfix以使用您的smtp设置(例如来自谷歌),并将仅包含您的电子邮件的文件~/.forward
添加到系统中运行该cronjob的用户的主目录。