しばしば、crontab
スクリプトが予定通り、あるいは期待通りに実行されないことがあります。それには多くの理由があります。
このコミュニティWikiは、crontab
スクリプトが期待通りに実行されない上位の理由を集約することを目的としています。それぞれの理由を別の回答で書いてください。
1つの回答につき1つの理由(実行されない理由の詳細)と、その理由に対する修正方法を書いてください。
シェルからは期待通りに実行されるのに、cronでは誤って実行されるコマンドなど、cron特有の問題のみを書いてください。
私の一番の問題点は、crontab
ファイルの最後に改行を入れ忘れてしまうことです。言い換えれば、crontabファイルは空の行で終わらなければなりません。
以下は、この問題に関するmanページの関連セクションです(man crontab
で最後まで読み飛ばしてください)。
Although cron requires that each entry in a crontab end in a newline
character, neither the crontab command nor the cron daemon will detect
this error. Instead, the crontab will appear to load normally. However,
the command will never run. The best choice is to ensure that your
crontab has a blank line at the end.
4th Berkeley Distribution 29 December 1993 CRONTAB(1)
スクリプトに使用する絶対パスを指定します。
例えば、grep
ではなく、/bin/grep
を使用してください。
# m h dom mon dow command
0 0 * * * /bin/grep ERROR /home/adam/run.log &> /tmp/errors
の代わりになります。
# m h dom mon dow command
0 0 * * * grep ERROR /home/adam/run.log &> /tmp/errors
これは特に厄介で、同じコマンドをシェルから実行しても動作するからです。その理由は、cron
がユーザーと同じPATH
環境変数を持っていないからです。