はじめに
cronの実行結果を確認しようとcron.logを探しに行くもそれらが存在しない場合の調査方法/流れについて記載しました。
結論から言えば該当のメッセージは/var/log/syslogに格納されているケースが一般的です。
コマンド実行環境
- Debian GNU/Linux 9 (stretch)
syslogでログを管理している
以下の記事にてsyslogの扱い方について触れていますので”syslogとは?”という方は先に一読ください。
本題ですが/var/log/cron.log
がない場合は以下の二つの可能性があります。
- syslogの設定にてcron.logとcronのログを切り出す設定が入っていない
- syslogの設定にてcronのログの出力先を明示的に変更している
syslogの設定ファイルは/etc/rsyslog.confに存在しているので、cronに関する記載有無を確認します。
デフォルトで以下のようにコメントアウトされているケースがあり、これが上で述べた一つ目のケース。これは「cronというファシリティの全てのプライオリティのログを/var/log/cron.logに吐かせる」という設定です。
$ cat /etc/rsyslog.conf | grep cron #cron.* /var/log/cron.log ...
逆にこの記載がコメントアウトされず、出力のパスが別のパスとして記載されている場合が二つ目の場合となります。
ちなみにこれがコメントアウトされていた場合に過去のログは存在しないのでしょうか?実際は存在しており、冒頭で述べたように/var/log/syslogに出力されています。
cronで実行されているスクリプトをキーにsyslogファイルの中身を検索してみると以下のようにcronログが確認できます。
... ... CRON[13952]: (root) CMD (/root/everyminute.sh) ... ... CRON[13983]: (root) CMD (/root/everyminute.sh)
/var/log/cron.logに出力させたい場合
ログを/var/log/cron.logに出力させるためには先ほどのコメントアウトを外して
cron.* /var/log/cron.log
syslogの再起動を行います。
$ /etc/init.d/rsyslog restart [ ok ] Restarting rsyslog (via systemctl): rsyslog.service.
これにより新たな設定が反映され、cronの実行時刻後に見に行くと以下のようにファイルができています。
$ cat /var/log/cron.log ...
終わりに
Linuxにおけるログ管理のポイントとして、sysglogに吐き出されている数々のログは任意のフィルターで別ファイルとして保存ができ、それらを担うのが「rsyslog.conf」というファイルである、という点です。
以上、ご参考になれば幸いです。