These are the notes of a training course on systemd I gave as part of my work with Truelite.
There is quite a lot of material, so I split them into a series of posts, running once a day for the next 9 days.
Units
Everything managed by systemd is called a unit (see man systemd.unit
),
and each unit is described by a configuration in ini-style format.
For example, this unit continuously plays an alarm sound when the system is in emergency or rescue mode:
[Unit] Description=Beeps when in emergency or rescue mode DefaultDependencies=false StopWhenUnneeded=true [Install] WantedBy=emergency.target rescue.target [Service] Type=simple ExecStart=/bin/sh -ec 'while true; do /usr/bin/aplay -q /tmp/beep.wav; sleep 2; done'
Units can be described by configuration files, which have different extensions based on what kind of thing they describe:
.service
: daemons.socket
: communication sockets.device
: hardware devices.mount
: mount points.automount
: automounting.swap
: swap files or partitions.target
: only dependencies, like Debian metapackages.path
: inotify monitoring of paths.timer
: cron-like activation.slice
: group processes for common resource management.scope
: group processes for common resource management
System unit files can be installed in:
/lib/systemd/system/
: for units provided by packaged software/run/systemd/system/
: runtime-generated units/etc/systemd/system/
: for units provided by systemd administrators
Unit files in /etc/
override unit files in /lib/
. Note that while Debian
uses /lib/
, other distributions may use /usr/lib/
instead.
If there is a directory with the same name as the unit file plus a .d
suffix,
any file *.conf
it contains is parsed after the unit, and can be used to add
or override configuration options.
For example:
/lib/systemd/system/beep.service.d/foo.conf
can be used to tweak the contents of/lib/systemd/system/beep.service
, so it is possible for a package to distribute a tweak to the configuration of another package./etc/systemd/system/beep.service.d/foo.conf
can be used to tweak the contents of/lib/systemd/system/beep.service
, so it is possible a system administrator to extend a packaged unit without needing to replace it entirely.
Similarly, a unitname.wants/
or unitname.requires/
directory can be used to
extend Wants=
and Requires=
dependencies on other units, by placing
symlinks to other units in them.
See also: