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

もっと詳しく知りたいときは?

北進総業は中小企業向けにITサポートサービスを提供しております。パソコンからクラウドまで、なんでもご相談ください。

    *必須項目

    会社名/屋号等

    氏名/担当者名*

    メールアドレス*

    電話番号

    ご用件*

    CAPTCHA*

    「私はロボットではありません」


    サーバー管理システム開発