run-parts(periodic)で mail の送信先を変更する
いやなんかね。cron の管理が面倒で面倒で。とにかく登場するファイルの数を減らしたいわけです。
crontabファイルとスクリプトの氾濫
cron の設定管理は意外に難しい。crontab ファイル一つにすべて書くと見にくくなるし、だからと言って Linux で cron.d/ 以下に分けて書くと何時にどういうジョブが走るのか、全体の見通しが悪くなる。システム全体に関わるジョブを実行ユーザーが root じゃないからという理由で crontab コマンドを使って設定するなんてもってのほか。
また、cron.d/ 方式は crontab と実際に実行するスクリプトがそれぞれ別個に増えていく方式なので、煩雑さに拍車がかかる。
というかそもそも一つ一つのスクリプトについていちいち細かく実行時間を設定したくない。
解決案 run-parts(periodic) の活用
ではどうするのがよいのだろうと思い悩んだが、
- 特別負荷が高くなく
- 順番に依存しない処理
であれば、daily, weekly, monthly のように run-parts(periodic) を活用するのがよいように思う。この方法は
あるディレクトリ以下に実行するスクリプトを直接置くだけ1
という気軽さがあるし、crontab ファイルは増えないので実行スクリプトの管理だけに集中することができる。
run-parts(periodic)活用時の MAILTO 問題
crontab は独自に MAILTO や HOME などの変数を解釈してくれるし、スクリプトを実行するユーザーも個別に指定できる。これを活用することで permission の問題に対応したり結果の送信先を柔軟に変更できるのだが、run-parts(periodic) を利用した場合は残念ながら cron が run-parts を実行するユーザーが誰であるかに関係なく root 宛に mail が届く。2
この送信先を変更したければ
run-parts DIR | sendmail ADDR
として明示的にメールの送信先を変更するしかないみたい。
またこの方法で変更した場合に届くメールは当然 cron からの通知ではないので subject が自動で設定されたりはしない。man sendmail.
cf.