Cron 失败,退出状态为 127

Cron 失败,退出状态为 127

我正在尝试让我的 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 就像是“命令未找到错误”或者别的什么东西,所以我使用了到 bins 的完整路径,即使像 bundle 一样/usr/local/bin/bundle,该任务在 cron 之外运行良好,只需在 shell 中运行它。

我的 crontab 非常简单:

*/10 * * * * cd /home/deploy/apps/dashboard/current && bundle exec rake some:task

也许我的 crontab 需要#!/usr/bin或顶部的某些东西?


更新

仅测试一下,它似乎运行得很好:

*/1 * * * *  /usr/bin/touch /home/deploy/cron-test.txt

所以这让我认为它就像一个 PATH 变量,但我不知道如何在其中获取正确的路径变量,有什么想法吗?

答案1

当 bash 无法找到命令时,它会设置退出状态 127(请参阅高级 Bash 脚本)。为了使调试更容易,您应该将所有内容放在脚本中。确保脚本是可执行的,并以解释器名称和路径开头:

#! /bin/bash
cd /.../ &&  next_command

您应该有类似以下内容的 crontab 行:

*/10 * * * * cd /home/deploy/apps/dashboard/current && /PATH_TO/bundle exec rake some:task

或者在 crontab 中设置 PATH 变量:

PATH=/bin:/usr/bin:/sbin:/usr/sbin:/PATH_TO_bundle
*/10 * * * * cd /home/deploy/apps/dashboard/current && /PATH_TO/bundle exec rake some:task

答案2

man 5 crontab如何为您的 cron 作业设置 PATH。

答案3

请看这里:http://ubuntuforums.org/showthread.php?t=1760488也许这会给你指明正确的方向。

通常我对 cron 作业所做的就是创建一个脚本文件,测试该脚本,然后将该脚本放入 cron 中。

希望这会有所帮助。

相关内容