もみあげあしめ

組み込みとかIoTとか、いろいろ

cronのログを出すように設定する

cron で指定時間に実行するように設定したのに、なぜか期待する動作をしていない。
そんなこと、ありますよね。

f:id:shima_nigoro:20160503141126p:plain:w300

そんな時は、偉大なる 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)