2014-08-24 18:18:18 +01:00
|
|
|
<chapter xmlns="http://docbook.org/ns/docbook"
|
|
|
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
|
|
xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
|
|
version="5.0"
|
|
|
|
xml:id="sec-systemctl">
|
|
|
|
|
|
|
|
<title>Service Management</title>
|
|
|
|
|
|
|
|
<para>In NixOS, all system services are started and monitored using
|
|
|
|
the systemd program. Systemd is the “init” process of the system
|
|
|
|
(i.e. PID 1), the parent of all other processes. It manages a set of
|
|
|
|
so-called “units”, which can be things like system services
|
|
|
|
(programs), but also mount points, swap files, devices, targets
|
|
|
|
(groups of units) and more. Units can have complex dependencies; for
|
|
|
|
instance, one unit can require that another unit must be successfully
|
|
|
|
started before the first unit can be started. When the system boots,
|
|
|
|
it starts a unit named <literal>default.target</literal>; the
|
|
|
|
dependencies of this unit cause all system services to be started,
|
|
|
|
file systems to be mounted, swap files to be activated, and so
|
|
|
|
on.</para>
|
|
|
|
|
|
|
|
<para>The command <command>systemctl</command> is the main way to
|
|
|
|
interact with <command>systemd</command>. Without any arguments, it
|
|
|
|
shows the status of active units:
|
|
|
|
|
|
|
|
<screen>
|
|
|
|
$ systemctl
|
|
|
|
-.mount loaded active mounted /
|
|
|
|
swapfile.swap loaded active active /swapfile
|
|
|
|
sshd.service loaded active running SSH Daemon
|
|
|
|
graphical.target loaded active active Graphical Interface
|
|
|
|
<replaceable>...</replaceable>
|
|
|
|
</screen>
|
|
|
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>You can ask for detailed status information about a unit, for
|
|
|
|
instance, the PostgreSQL database service:
|
|
|
|
|
|
|
|
<screen>
|
|
|
|
$ systemctl status postgresql.service
|
|
|
|
postgresql.service - PostgreSQL Server
|
|
|
|
Loaded: loaded (/nix/store/pn3q73mvh75gsrl8w7fdlfk3fq5qm5mw-unit/postgresql.service)
|
|
|
|
Active: active (running) since Mon, 2013-01-07 15:55:57 CET; 9h ago
|
|
|
|
Main PID: 2390 (postgres)
|
|
|
|
CGroup: name=systemd:/system/postgresql.service
|
|
|
|
├─2390 postgres
|
|
|
|
├─2418 postgres: writer process
|
|
|
|
├─2419 postgres: wal writer process
|
|
|
|
├─2420 postgres: autovacuum launcher process
|
|
|
|
├─2421 postgres: stats collector process
|
|
|
|
└─2498 postgres: zabbix zabbix [local] idle
|
|
|
|
|
|
|
|
Jan 07 15:55:55 hagbard postgres[2394]: [1-1] LOG: database system was shut down at 2013-01-07 15:55:05 CET
|
|
|
|
Jan 07 15:55:57 hagbard postgres[2390]: [1-1] LOG: database system is ready to accept connections
|
|
|
|
Jan 07 15:55:57 hagbard postgres[2420]: [1-1] LOG: autovacuum launcher started
|
|
|
|
Jan 07 15:55:57 hagbard systemd[1]: Started PostgreSQL Server.
|
|
|
|
</screen>
|
|
|
|
|
|
|
|
Note that this shows the status of the unit (active and running), all
|
|
|
|
the processes belonging to the service, as well as the most recent log
|
|
|
|
messages from the service.
|
|
|
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>Units can be stopped, started or restarted:
|
|
|
|
|
|
|
|
<screen>
|
2016-06-01 15:23:32 +01:00
|
|
|
# systemctl stop postgresql.service
|
|
|
|
# systemctl start postgresql.service
|
|
|
|
# systemctl restart postgresql.service
|
2014-08-24 18:18:18 +01:00
|
|
|
</screen>
|
|
|
|
|
|
|
|
These operations are synchronous: they wait until the service has
|
|
|
|
finished starting or stopping (or has failed). Starting a unit will
|
|
|
|
cause the dependencies of that unit to be started as well (if
|
|
|
|
necessary).</para>
|
|
|
|
|
|
|
|
<!-- - cgroups: each service and user session is a cgroup
|
|
|
|
|
|
|
|
- cgroup resource management -->
|
|
|
|
|
|
|
|
</chapter>
|