cron で指定時間に実行するように設定したのに、なぜか期待する動作をしていない。
そんなこと、ありますよね。
そんな時は、偉大なる syslog 様に助けてもらいましょう。
1. rsyslog でcron用のログを吐くように設定する
・rsyslog の設定ファイル(/etc/rsyslog.conf)を開く。
sudo nano /etc/rsyslog.conf
・cron用のログの設定行がコメントアウトされているので # を消す。
cron.* /var/log/cron.log
#一部抜粋しているだけなので、間違っても上記のみ残すとかはやめてください。
・設定の変更後は再起動
sudo /etc/init.d/rsyslog restart
2. cron のログレベルを設定する
・cron の設定ファイル(/etc/default/cron)を開く。
sudo nano /etc/default/cron
・レベルを設定する。とりあえず全部表示させたければ足して15にすればよい。
# For quick reference, the currently available log levels are: # 0 no logging (errors are logged regardless) # 1 log start of jobs # 2 log end of jobs # 4 log jobs with exit status != 0 # 8 log the process identifier of child process (in all logs) # EXTRA_OPTS='-L 15'
#一部抜粋しているだけなので、間違っても上記のみ残すとかはやめてください。
・cron も設定変更後は再起動する
sudo /etc/init.d/cron restart
3. ログファイルを確認する
色々あると思いますが、実行されるタイミングを監視したければ
ログに追記されるタイミングを見ればいいんじゃないでしょうか。
tail -f /var/log/cron.log
以上で設定と確認方法は終わりです。お疲れ様でした。
#ログがいらなくなった場合は設定を戻しましょう。
補足
ユーザ名「user」、ホスト名「hostname」でコマンド「sh hoge.sh」を実行開始して、失敗したとき
Jun 12 18:10:01 hostname CRON[12968]: (user) CMD ([12975] sh hoge.sh) Jun 12 18:10:06 hostname CRON[12968]: (CRON) error (grandchild #12975 failed with exit status 1) Jun 12 18:10:06 hostname CRON[12968]: (user) END ([12975] sh hoge.sh)
ユーザ名「user」、ホスト名「hostname」でコマンド「sh hoge.sh」を実行開始して、成功したとき
Jun 12 18:11:01 hostname CRON[13028]: (user) CMD ([13035] sh hoge.sh) Jun 12 18:11:13 hostname CRON[13028]: (user) END ([13035] sh hoge.sh)