LoginSignup
10
8

More than 5 years have passed since last update.

cronの出力をメールでなくSlackに送る方法

Last updated at Posted at 2016-09-25

概要:crondのオプションでsendmailの代わりに独自スクリプトのパスを指定する

crondにはcronie, fcron, vixie-cronと色々種類があり、対応オプションも違うと思う。ここではcronieを使っているものとする。

sendmailの代替スクリプトを作成(urlを自分のIncoming WebhookのURLで置き換えること)

/usr/bin/sendmail.slack
#!/usr/bin/env ruby

require "json"
require "faraday"

url = "***** SlackのIncoming WebhookのURL *****"

message = $stdin.read

payload =
{
    "channel": "#general",
    "username": "sendmail.slack",
    "text": message,
}

res = Faraday.post url, JSON.generate(payload), content_type: "application/json"
puts res.status
puts res.body

faradayを使っているので

gem install faraday

としておいてください。

systemctl edit cronie
/etc/systemd/system/cronie.service.d/override.conf
[Service]
# ↓既存のExecStart=を上書きするには、これでクリアする必要がある。
ExecStart=
ExecStart=/usr/bin/crond -n -m /usr/bin/sendmail.slack
systemctl daemon-reload
systemctl reload cronie

ps aux | grep crond

### crond が /usr/bin/crond -n -m /usr/bin/sendmail.slack で起動していることを確認

以上。

journalctl -u cronie -fしつつ適用にcronジョブを設定して動作確認。

追記

よく考えたら、ジョブの指定で末尾に

2>&1 | /usr/bin/sendmail.slack

とする方法でもよかったかもしれない。

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8