cronでエラーメールの送り先を指定する方法

cronは良く使うツールの一つだと思いますが、何故かトラブルの思い出がつきまとうのは僕だけでしょうか。今日はそんなcronの便利な機能を一つ紹介します。

cronで実行するコマンドの作法

はじめにcronスクリプトの作法を紹介します。cronは決められた時間が来るとコマンドを自動実行する仕組みですが、自動実行するコマンドは下記の条件を満たすべきです。

  • 正常終了した場合は標準出力/標準エラー出力に何も出力しない
  • 異常終了した場合は標準出力/標準エラー出力にエラーメッセージを出力する

というのも、cronで実行したコマンドが標準出力・エラー出力に1バイトでも出力した場合、その内容がメールで送信されます。僕は異常時だけメールを受け取る使い方が一番スマートに思えます。

もしくは、次のような使い方も考えられます。

  • コマンドのログは標準出力に出力し、ローカルのログファイルに追記する
  • 異常終了した場合は標準エラー出力にエラーメッセージを出力する

上記の内容はmanpageに書いてあるような内容ではありませんし、異論もあるとは思います。ただ、標準出力もエラー出力も/dev/nullにリダイレクトするような使い方を見た事がありますが、不慮の事故があった場合に手がかりが無くなってしまいますので、良いやり方ではないと思います。

メールの送信先と環境変数

このcron実行結果のメールの送信先は、デフォルトでcronを実行するローカルユーザーになります。この送信先はcrontabの1行ごとに変えることができます。

MAILTO=daily-job@example.com
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/daily.log
MAILTO=monthly-job@example.com
15 14 1 * * $HOME/bin/monthly.job

crontabでは、コマンドの起動時刻を指定するだけでなく環境変数の指定もできます。MAILTO環境変数が指定されていると、メールの送信先を変更することができます。

このMAILTOは意外と知られていない気がしますが、便利な機能だと思います。これを知らないと、メールを飛ばさないために何でも/dev/nullにリダイレクトしたくなるかもしれません。

コメント / トラックバックはありません

コメントする