A couple of scripts for your notification needs.
The two scripts are almost identical in their purpose: they read text stdin and send you a Telegram message.
telegram_text.sh sends everything as is, except it makes the very first line bold (I found it helpful and pretty).
Example:
cat /etc/motd | ./telegram_text.sh
telegram_image.sh converts text into an image (using a nice looking monospaced font) and sends it as an inline photo. Additionally this script uses commandline arguments as a caption for the image.
Example:
cat /etc/motd | ./telegram_image.sh "motd from $(hostname)"
- Create a Telegram bot — you'll need an API_KEY and a CHAT_ID.
- curl [both scripts] — for sending API requests.
- netpbm [telegram_image only] — for generating images from text.
- tempfile [telegram_image only] — comes from debianutils on my system; I hope there are equivalents elsewhere.
- These scripts are not very flexible; hopefully nothing breaks in a foreseeable future.
- pbmtext, which is part of netpbm package, doesn't support multibyte encodings at all. Moreover, the default monospaced font supports only 7-bit ASCII.
You have two options:- Use only 7-bit ASCII in your notification messages. English locale works excellent.
- Find and download an 8-bit font (BDF or PBM only) for your encoding of choice, for example KOI8-R.
Replacepbmtext -builtin fixed
withpbmtext -font /path/to/font
- The scripts are going to try to send messages until success (as reported by curl). So, indefinitely in the worst-case scenario.
- Create a link to telegram_text.sh in /etc/smartmontools/run.d:
ln -s /opt/notification-scripts/telegram_text.sh /etc/smartmontools/run.d/10telegram
- Make sure you have a "-M" command in /etc/smartd.conf; something like this:
DEVICESCAN -d removable -m root -a -M exec /usr/share/smartmontools/smartd-runner
- Now you'll receive warnings from smartd via Telegram!
This method is even cooler. We will change a mailer program, so ZED would just send an email as always, but it's going to end up in your Telegram messages.
- Open /etc/zfs/zed.d/zed.rc
- Set ZED_EMAIL_PROG to the path of your script of choice.
ZED_EMAIL_PROG="/opt/notification-scripts/telegram_image.sh"
- Optionally change ZED_EMAIL_OPTS, so that the image is sent with a caption.
ZED_EMAIL_OPTS="#zfs #$(hostname)"
I chose to use hashtags, it really simplifies searching for messages from different hosts and daemons.