从Crontab运行Rake任务?

7

技术栈:

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(Ruby Enterprise Edition),考虑到默认路径可能与/opt/ruby-enterprise不兼容...
如何使这个rake任务真正通过cron运行?

1
你也是用那个用户在运行它吗?sudo su app_user,然后按照cron作业中的命令完全运行它。如果它像那样工作,那么在cron中应该可以工作。 - Michael Papile
2个回答

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'

8

尝试使用 rake 二进制文件的完整路径(在控制台中运行 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中使用whenever gem来处理cron jobs。

如何检测cron任务是否失败?在任务失败时,cron尝试发送电子邮件。因此,您可以配置postfix使用您的smtp设置(例如从谷歌),并将文件~/.forward添加到运行系统中该cronjob的用户的主目录中,其中只包含您的电子邮件地址。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接