web-dev-qa-db-ja.com

cronタスクレポートコマンドが見つかりません

これは私のcrontabファイルの内容です:

0 0,6,12,18 * * * cd /var/www/app/current && backup perform --trigger db_backup --config_file config/backup.rb --data-path db --log-path log --tmp-path tmp >> /var/www/app/current/log/cron.log 2>&1

0 3 * * * cd /var/www/app/current && Rails_ENV=production bundle exec rake runs:populate --silent >> /var/www/app/current/log/cron.log 2>&1

59 23 * * * cd /var/www/app/current && Rails_ENV=production bundle exec rake runs:log --silent >> /var/www/app/current/log/cron.log 2>&1

これらのいずれかをcrontabの所有者として手動で実行すると、正常に動作しますが、cron.logファイルには次の内容が含まれています。

/bin/sh: bundle: not found
/bin/sh: backup: not found
/bin/sh: bundle: not found

私はそれぞれを次のようにラップしてみました(デフォルトでは いつでもgem は、私のcronファイルの管理に使用しています)bash -l -c '...'ですが、bash以外は上記と同じですbash: bundle: command not found

8
DEfusion

CRONジョブのデフォルトのPATHは通常/usr/bin:/bin。コマンドbundleおよびbackupは、デフォルトパスに含まれていない可能性があります。 1つの解決策は、crontabを変更し、これらのコマンドへのフルパスを含めることです。

0 0,6,12,18 * * * cd /var/www/app/current && /path/to/backup ...

一般に、crontabではフルパスを使用することをお勧めします。必要に応じて、crontab内でPTHを指定することもできます

PATH=/bin:/usr/bin:/path/to/your/program

0 0,6,12,18 * * * cd /var/www/app/current && backup ...
13
user9517

はい、実際のcrontabレコードの前にパスを設定できます。例:

PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:
0 3 * * * run-cron-job
3