Cron 失败,退出状态为 127

JP *_*shy 9 ubuntu cron

我试图让我的 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)
Run Code Online (Sandbox Code Playgroud)

似乎 127 就像“未找到命令的错误”或类似的东西,所以我使用了 bin 的完整路径,即使像 bundle 一样/usr/local/bin/bundle,任务在 cron 之外运行良好,只是在 shell 中运行它。

我的 crontab 只是:

*/10 * * * * cd /home/deploy/apps/dashboard/current && bundle exec rake some:task
Run Code Online (Sandbox Code Playgroud)

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


更新

为了测试它,它似乎运行得很好:

*/1 * * * *  /usr/bin/touch /home/deploy/cron-test.txt
Run Code Online (Sandbox Code Playgroud)

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

Mir*_*ici 10

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

#! /bin/bash
cd /.../ &&  next_command
Run Code Online (Sandbox Code Playgroud)

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

*/10 * * * * cd /home/deploy/apps/dashboard/current && /PATH_TO/bundle exec rake some:task
Run Code Online (Sandbox Code Playgroud)

或在 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
Run Code Online (Sandbox Code Playgroud)