web-dev-qa-db-ja.com

cronが終了ステータス127で失敗する

Railsアプリに対していくつかのrakeタスクを実行するようにcrontabを取得しようとしていますが、常に127のステータスで終了しているようです。syslogでは次のようになります。

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は「コマンドが見つかりません」エラーなどのようです。したがって、バンドルが/usr/local/bin/bundleのように、ビンへのフルパスを使用しました。タスクは、シェルで実行するだけで、cronの外で正常に実行されます。

私の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変数のようなものだと思うようになりますが、そこに正しいパス変数を取得する方法がわかりません。

7
JP Silvashy

終了ステータス127は、コマンドが見つからない場合にbashによって設定されます( Advanced Bash Scripting を参照)。デバッグを簡単にするために、すべてのものをスクリプトに入れる必要があります。スクリプトが実行可能であり、インタープリターの名前とパスで始まることを確認します。

#! /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
9

見る - man 5 crontab cronジョブのPATHを設定する方法。

1
AlexD

ここを見てください: http://ubuntuforums.org/showthread.php?t=1760488 おそらくこれはあなたを正しい方向に導くでしょう。

通常、私がcronジョブで行うことは、スクリプトファイルを作成し、スクリプトをテストしてから、スクリプトをcronに配置することです。

これがお役に立てば幸いです。

0
b2c3