Systemd services to announce system startup and shutdown via ntfy.sh notifications.
To install, copy the service files into /etc/systemd/system/.
Optionally, copy ntfy-failure@.service and test-fail.service into /etc/systemd/user/ to allow them to be used for user services.
In this case, for ntfy-failure use the ExecStart with the --user flag added to the journalctl command.
Otherwise, it defaults to the system logs, which the current user might not have access to and which likely won't contain the relevant error message.
Create a topic on ntfy.sh (for a custom instance, see customization below) and enable the services using yourTopicName:
systemctl enable ntfy-startup@yourTopicName.service
systemctl enable ntfy-shutdown@yourTopicName.serviceTo just test if it works, use start instead of enable.
For the ntfy-failure@.service an override is required to set the topic: systemctl [--user] edit ntfy-failure@.service and add:
[Service]
Environment=NTFY_TOPIC=yourTopicNameTo test if this works run systemctl [--user] start test-fail.
Now, you can set OnFailure=ntfy-failure@$i.service in the [Unit] section of any service or unit you want.
Even globally for all services in /etc/systemd/system/service.d/onfailure.conf and/or in /etc/systemd/user/service.d/onfailure.conf:
[Unit]
OnFailure=ntfy-failure@%i.serviceAside from directly editing the service files, they can be customized using override configurations (conf file in /etc/systemd/system/ntfy-startup@yourTopicName.service.d/ or using systemctl edit ntfy-startup@yourTopicName.service).
The following environment variables are intended to be customizable:
| Variable name | Description | Default value | supported by startup | supported by shutdown | supported by failure |
|---|---|---|---|---|---|
NTFY_URL |
Base URL to self hosted instance. | https://ntfy.sh |
✅️ | ✅️ | ✅ |
NTFY_TAGS |
Tags/Emoji displayed with the message, see https://docs.ntfy.sh/emojis/ | green_circle 🟢️ or red_circle 🔴️ or warning |
✅️ | ✅️ | ✅ |
NTFY_MESSAGE |
Additional message content (after "hostname is online") | Startup time: $(uptime) |
✅️ | ❌️ | ❌ |
NTFY_TOPIC |
Specify topic to publish to. Only for ntfy-failure - set this as part of the service name for startup/shutown instead. |
❌ | ❌ | ✅ |
E.g., a message to display the public IPv4, IPv6 and local IP:
[Service]
Environment=NTFY_MESSAGE="IPv4: $(dig @resolver3.opendns.com myip.opendns.com +short -4) - IPv6: $(dig @resolver3.opendns.com myip.opendns.com +short -6) - Local IPs: $(hostname -i)"