自動処理の結果を通知する
自動化でいちばん怖いのは、失敗したことに誰も気づかないことです。動いているつもりのバックアップが3週間前から止まっていた、という事故は珍しくありません。この回では、コマンドの終了コード $? で成否を見分け、成功と失敗で動きを分け、cron のメールや curl による webhook で結果を届ける方法を学びます。ポイントは「ログには全部残す・人には失敗したときだけ知らせる」設計です。通知しすぎると狼少年になり、誰も見なくなります。
自動化された処理でいちばん怖いのは、失敗そのものではない。失敗したことに誰も気づかないことだ。毎晩のバックアップが3週間前から静かに止まっていて、いざ復元しようとして初めて気づく。こういう事故は珍しくない。
cron に仕掛けたジョブは、成功しても失敗しても、基本は黙って終わる。画面を見ている人はいない。だから自動化には「うまくいったか・こけたか」を外へ伝える口を、意図して付けてやる必要がある。
🔢 成否を握る終了コード
成否を見分ける鍵は、終了コード(exit code)だ。コマンドは終わるとき、0 なら成功、0 以外なら失敗、という数字をこっそり残す。この直前のコマンドの終了コードは、特別な変数 $? で読める。
0 が返れば万事うまくいった証、0 以外なら何かしくじった証だ。人間はふだん気にしないが、この数字こそがスクリプト同士の会話に使う「合否の signal」になる。
🔀 && と || で分岐する
この終了コードを使うと、成功と失敗で動きを分けられる。A && B は「A が成功したら B もやる」、A || B は「A が失敗したら B をやる」という意味の、シェルの短い書き方だ。
&& と || を並べると、ちょうど「うまくいけばこっち、こければあっち」の分かれ道になる。失敗したときの側にだけ通知を置けば、平常時は静かで、異常時だけ声を上げる仕組みになる。
📧 cron からメールで受け取る
定期実行の cron には、通知の口が最初から付いている。crontab の先頭に MAILTO を書いておくと、ジョブが何か画面へ出力したとき、その内容が指定アドレスへメールで届く。
コツは「ふだんは何も出力させない」ことだ。cron は出力があるときだけメールするので、成功時は沈黙・失敗時だけエラーを出力するように書けば、メールが来た=異常、という分かりやすい運用になる。
🔔 curl で webhook へ飛ばす
メールが使えない、あるいはチャットで受け取りたいときは、webhook(ウェブフック)が便利だ。webhook は「この URL を叩けば通知が飛ぶ」という受け口で、チャットツールの多くが提供している。そこへ curl で HTTP を送るだけでいい。
-X POST は送信の種類、-H はヘッダー、-d は送る中身(ここでは JSON)を表す。これをスクリプトの || の側に置けば、こけた瞬間に手元のチャットへ赤い通知が届く、という運用ができあがる。
🐺 通知しすぎは狼少年
通知は多ければよいものではない。成功のたびに鳴らすと、通知は日常の風景になり、本当に危ないときの1通が埋もれてしまう。イソップの狼少年と同じで、鳴らしすぎた警報は誰も見なくなる。
だから設計の芯は「ログには全部残す・人には失敗したときだけ知らせる」だ。細かな足あとは静かにログへ書き、人の注意を呼ぶのは対応が要るときだけにする。この線引きが、通知を生きたままに保つ。
黙って失敗しないこと。これだけで自動化の信頼はぐっと上がる。終了コードで成否を見て、失敗の道に通知を置き、鳴らしすぎない。この3つを守れば、あなたの仕組みは「気づける自動化」になる。