crontabの実行結果をSlackで受け取る方法

shellサーバー管理

Linuxマシン上で定期的にコマンドやスクリプトを実行するcrontabというものがあります。その実行結果、つまり標準出力と標準エラー出力は、メールでroot宛に送信されます。

しかし、システムからの通知の手段としてメールを使うというのは今どきどうかと思いますし、Ubuntuは標準ではメールサーバーが入っていないため別途Postfixなどをインストールしないとcrontabの出力は捨てられてしまいます。

そこで、弊社ではcrontabの実行結果をメールではなくSlackに通知しています。システム全体で設定するわけではなくジョブごとに設定するものですので手軽に導入できます。

方法は単純で、引数として渡されたコマンドを実行してその標準エラー出力をSlackのWebhookに投げるというシェルスクリプトを作成して利用します。少し書き換えればその他のサービスのWebhookにも対応できるかと思います。

crontab
*/5 * * * * ubuntu /home/ubuntu/cron2slack.sh '/path/to/command'
cron2slack.sh
#!/bin/bash

HOSTNAME=`hostname -s`
USERNAME=`whoami`

STDERR=`$1 2>&1 >/dev/null`
if [ -n "$STDERR" ]; then
	curl -X POST -H "Content-type: application/json" --data "{\"text\":\"*Cron <$USERNAME@$HOSTNAME> $1*\`\`\`$STDERR\`\`\`\"}" https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX
fi
タイトルとURLをコピーしました