我试图让我的 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)
归档时间: |
|
查看次数: |
26716 次 |
最近记录: |