cron を使用するに際し、次のような不満点があります。
- cronのログ(/var/log/cron)では、cron で実行した各コマンドの成功/失敗は分からない
- cron は出力を受け取ると MAILTO に指定されたアドレスに、その内容をメールする。
通常の出力内容もメールされてしまう。
特に、エラーでもないのにメール送信されてくることが煩わしいですが、cron実行結果のログを捨てる訳にもいきません。
過去には次のようなツイートも話題になりました。
fujiwaraさんのツイート: “crontabに > /dev/null 書いたら椅子投げる”
cron実行では、次のようなことができたら嬉しいですね。
- cron実行での出力内容(標準出力とエラー出力両方共)はファイルにログ出力する。
- cron実行でエラーだった場合のみ、実行結果(標準出力とエラー出力両方共)をメール通知する。
そこで、これらが出来る cronlog を使います。
準備・インストール
cron 実行での出力内容は、設定ファイル(/tec/crontab等)の MAILTO行で指定されたアドレスにメール送信されます。
必要に応じて MAILTO を記述しておきます。
次に cronlog をダウンロード・ビルドします。
wget https://github.com/kazuho/kaztools/archive/master.zip unzip master.zip cd kaztools-master perl Makefile.PL && make && make test
最後に Result: PASS と表示されれば OK です。
インストールします。
sudo make install
実行
下記書式で、cron で実行します。
/usr/local/bin/cronlog --logfile=ログファイル --timestamp -- コマンド
指定した”コマンド”の出力内容(標準出力とエラー出力両方)は、”ログファイル”で指定したファイルに、タイムスタンプ付きで追加出力(append)されます。
以下のような出力です。
XXXXX の箇所にはホスト名が入ります。
[Wed Oct 11 15:05:07 2017] XXXXX starting: sh test.sh [Wed Oct 11 15:05:07 2017] success [Wed Oct 11 15:05:07 2017] error [Wed Oct 11 15:05:07 2017] error2 [Wed Oct 11 15:05:07 2017] success2 [Wed Oct 11 15:05:07 2017] command exited with code:250
“コマンド”の実行が失敗(リターンコードが0以外)なら、ファイルに出力したものと同じ内容を標準出力にも出力します。
オプションに –print-always を付けると、”コマンド” の成功/失敗に関わらず、常に標準出力に出力されます。
これらの標準出力への出力内容は cronによって、 crontabの先頭の MAILTO で指定されたアドレスにメール送信されます。
その他実行例
cronlog --timestamp -- コマンド
コマンドが失敗した時のみ、出力結果をメール送信します。
ファイルには残りません。
cronlog --logfile=ログファイル --timestamp -- コマンド
コマンドの実行結果をファイル出力します。また失敗した時は、出力結果をメール送信します。
cronlog --timestamp --print-always -- コマンド
コマンドの実行結果をいつもメール送信します。
ファイルには残りません。
cronlog --logfile=ログファイル --timestamp --print-always -- コマンド
コマンドの実行結果をいつもファイル出力&メール送信します。
コメント