These are the notes of a training course on systemd I gave as part of my work with Truelite.
Writing .unit files
For reference, the global index with all .unit file directives is at
man systemd.directives.
All unit files have a [Unit] section with documentation and dependencies. See
man systemd.unit
for documentation.
It is worth having a look at existing units to see what they are like. Use
systemctl --all -t unittype for a list, and systemctl cat unitname to see
its content wherever it is installed.
For example: systemctl cat graphical.target. Note that systemctl cat adds a
line of comment at the top so one can see where the unit file is installed.
Most unit files also have an [Install] section (also documented in
man systemd.unit)
that controls what happens when enabling or disabling the unit.
See also:
.target units
.target units only contain [Unit] and [Install] sections, and can be used
to give a name to a given set of dependencies.
For example, one could create a remote-maintenance.target unit, that when
brought up activates, via dependencies, a set of services, mounts, network
sockets, and so on.
See systemctl --all -t target for examples.
special units
man systemd.special
has a list of units names that have a standard use associated to them.
For example, ctrl-alt-del.target is a unit that is started whenever
Control+Alt+Del is pressed on the console. By default it is symlinked to
reboot.target, and you can provide your own version in /etc/systemd/system/
to perform another action when Control+Alt+Del is pressed.
User units
systemd can also be used to manage services on a user session, starting them at login and stopping them at logout.
Add --user to the normal systemd commands to have them work with the current
user's session instead of the general system.
See systemd/User in the Arch Wiki for a good description of what it can do.