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.