Cron jobs are a vital part of every sysadmins setup. Backups, log rotation, certificate renewal and whatnot.
I've mostly just relied on them working as they should until now, but with my recent Huginn + Matrix obsession I figured I should have some sort of notifications.
Crontab supports sending emails for your jobs, all you have to do is add MAILTO=youremail@example.com
at the top. It defaults (on most distros) to sendmail
, which I discovered was kind of a pain to set up. Instead I found these instructions for sSMTP.
I already had an account at Mailgun for an old app so I just had to add my domain. Mailgun recommends using a subdomain so in my case I went with mg.jonnev.se
. I configured sSMTP
with my Mailgun credentials following the guide above and it worked just fine!
Now getting emails for everything is kinda annoying so using Mailguns routes I forwarded all incoming emails for the address I setup in crontab
to a webhook in Huginn. In the Mailgun examples you can see the JSON
for a forwarded email.
I then added an EventFormattingAgent
in Huginn with these attributes
{
"instructions": {
"message_html": "<b>{{bin.cmd}}</b><br>{{body-plain}}",
"message": "{{bin.cmd}} {% line_break %} {{body-plain}}"
},
"matchers": [
{
"path": "{{subject}}",
"regexp": ">\\s(?<cmd>.*)",
"to": "bin"
}
],
"mode": "clean"
}
Matrix supports HTML formatting with a fallback for plain text. There should be a <pre> around the message_html
above but Ghost wouldn't let me...
The result looks like this:
You could easily use this to send notifications to Slack, Pushover or any of the other services supported by Huginn. Or just an outbound webhook with PostAgent
, which is what I use to post to my Matrix room.
Hint: To learn how to control the output of commands in cron I found this post helpful
Hint 2: To silence certbot
(in the screenshot above) I'm now using this!