我试图让我的crontab为Rails应用程序运行一些rake任务,但似乎总是以127的状态退出,在我的系统日志中它看起来像这样:
Jun 7 05:10:01 ip-10-170-122-226 CRON[15664]: (deploy) CMD (cd /home/deploy/apps/dashboard/current && bundle exec rake some:task Jun 7 05:10:01 ip-10-170-122-226 CRON[15662]: (CRON) error (grandchild #15664 failed with exit status 127)
看起来127就像是“命令未find错误”或什么东西,所以我已经使用完整path的箱子,即使是捆绑是/usr/local/bin/bundle ,任务运行良好的Cron之外,只是运行它在壳。
我的crontab简单地说就是:
*/10 * * * * cd /home/deploy/apps/dashboard/current && bundle exec rake some:task
也许我的crontab需要#!/usr/bin或顶部的东西?
更新
为了testing它,它似乎运行这个很好:
*/1 * * * * /usr/bin/touch /home/deploy/cron-test.txt
所以这让我觉得它像一个path变化的东西,但我不知道如何在那里得到正确的道路变化,有什么想法?
退出状态127由bash在找不到命令时设置(请参阅高级Bash脚本 )。 为了使debugging更容易,你应该把所有的东西放在脚本中。 确保脚本是可执行的,并以解释器名称和path开始:
#! /bin/bash cd /.../ && next_command
您应该有crontab行类似于:
*/10 * * * * cd /home/deploy/apps/dashboard/current && /PATH_TO/bundle exec rake some:task
或者在crontab中设置PATHvariables:
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/PATH_TO_bundle */10 * * * * cd /home/deploy/apps/dashboard/current && /PATH_TO/bundle exec rake some:task
请参阅man 5 crontab如何为您的cron作业设置PATH。
看看这里: http : //ubuntuforums.org/showthread.php?t=1760488也许这将指向你在正确的方向。
通常我用cron作业做的是创build一个脚本文件,testing脚本,然后将脚本放在cron中。
希望这有助于。