概要: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
とする方法でもよかったかもしれない。