これは私の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
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 ...
はい、実際のcrontabレコードの前にパスを設定できます。例:
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:
0 3 * * * run-cron-job