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変数のようなものだと思うようになりますが、そこに正しいパス変数を取得する方法がわかりません。
終了ステータス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
見る - man 5 crontab
cronジョブのPATHを設定する方法。
ここを見てください: http://ubuntuforums.org/showthread.php?t=1760488 おそらくこれはあなたを正しい方向に導くでしょう。
通常、私がcronジョブで行うことは、スクリプトファイルを作成し、スクリプトをテストしてから、スクリプトをcronに配置することです。
これがお役に立てば幸いです。