After spending a few hours trying to get systemd to just keep a simple binary running if it halts, here’s what I’ve learned.
Systemd is a linux service manager. It handles running lots of processes and I wanted it to just run a simple slackbot binary for me. Basically if the bot goes down I want systemd to restart it for me. Since this is a silly thing and doesn’t really need lots of permissions or anything I want it to run for my user on the server and not as root.
First off any user level systemd scripts (called “units”) should be put in
~/.config/systemd/user/. For the slackbot I added a unit called “slackbot.service”.
These units are just text files, for a simple keep-alive script here’s what mine looked like:
[Unit] Description=Manage SlackBot [Service] ExecStart=/path/to/slackbot/binary Restart=always RestartSec=3 [Install] WantedBy=default.target
Then to load and start the service run
$ systemctl --user start slackbot
If you’d like to check that it was started appropriately
$ systemctl --user status slackbot
To have it run after a reboot you need to enable user lingering. To do this run the following command:
# loginctl enable-linger <username>
Then you need to enable the unit using systemd.
$ systemctl --user enable slackbot
That should output something like
Created symlink from ~/.config/systemd/user/default.target.wants/slackbot.service to ~/.config/systemd/user/slackbot.service.
Here’s a helpful resource. Memory dump complete.