🦆
cronで実行したタスクがコケたらSlackに通知する
はじめに
cronで回してるタスクがapt update
したあと死んでたのに暫く気づかなかった。
そこで、タスクがコケたらSlackへ流すようにしました。
やりかた
-
Songmu/horensoを使ってタスクを実行するshell scriptを書く
- horensoはタスクがコケると引数で指定したプロセスにエラー情報を渡して起動する
- これにSlackに通知するreporterを指定してhorensoを起動する
それでは、やっていきましょう。
詳細
horensoいれる
cf. horensoというcronやコマンドラッパー用のツールを書いた | おそらくはそれさえも平凡な日々
binaryはreleasesにtargzがあって、よしなに選びます。わたしは/usr/local/bin
に置いた。
reporterを入れる
cf. horensoのSlack reporterを書いた - beatsync.net
ぐぐるといろんな実装がありますが、個人的好みでこれにしました。
なお、Pythonのエラーが起きたときのメッセージを送ったらinvalid_payload
になって通知失敗したので修正(他にもちょこっといじった)していて、こちらに置いてあります。
wrapper scriptを書く
cronwrap.sh
#!/bin/sh
export SLACK_ENDPOINT='https://hooks.slack.com/services/YOUR_WEBHOOK_URL'
export SLACK_USERNAME='cronwatcher'
export SLACK_ICON_EMOJI=':3guru:'
export SLACK_MUTE_ON_NORMAL=1
exec /usr/local/bin/horenso \
-r /usr/local/bin/horenso_slack_reporter.pl \
-- "$@"
crontabを書き換える
22 21 * * * /home/walkure/cronwrap.sh /your/job
結果
/bin/false
は特段のエラーメッセージを吐かないのでメッセージの部分がbackquoteだけになってますが、実際になにか起きるときはメッセージがあるはずなのでこれでよしとする。
補遺
万が一、通知先のworkspaceに:3oko:
などがない場合はねずみのすきま — はかどる!ハッカドール3号くんのSlack用カスタム絵文字 を配布しますからどうぞ。
Discussion