UCS used Linux’ sysvinit up to version 4.1. Since UCS 4.2, systemd is used as default init system and replaces sysvinit. For now, sysvinit is still installed and available as a fallback. It can be selected as the second entry in the grub boot menu:
The first entry in the grub menu (which is the default) uses systemd.
Systemd offers a lot of new features and while it provides a broad layer of backwards compatibility to sysvinit services and service commands, getting familiar with the systemd-style commands has its advantages.
Which services?
To get an impression which services are present on your system and which of those are actually started, use the command systemctl
without any arguments:
root@ucs-7125:~# systemctl
output of systemctl
UNIT LOAD ACTIVE SUB DESCRIPTION proc-sys-fs-binfmt_misc.automount loaded active waiting Arbitrary Executable File Formats File System Automount Point sys-devices-pci0000:00-0000:00:01.1-ata1-host0-target0:0:0-0:0:0:0-block-sr0.device loaded active plugged QEMU_DVD-ROM sys-devices-pci0000:00-0000:00:03.0-virtio0-net-eth0.device loaded active plugged Virtio network device sys-devices-pci0000:00-0000:00:04.0-sound-card0.device loaded active plugged 82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition Audio Controller (QEMU Virtual Machine sys-devices-pci0000:00-0000:00:05.0-virtio1-virtio\x2dports-vport1p1.device loaded active plugged /sys/devices/pci0000:00/0000:00:05.0/virtio1/virtio-ports/vport1p1 sys-devices-pci0000:00-0000:00:07.0-virtio2-block-vda-vda1.device loaded active plugged /sys/devices/pci0000:00/0000:00:07.0/virtio2/block/vda/vda1 sys-devices-pci0000:00-0000:00:07.0-virtio2-block-vda-vda2.device loaded active plugged /sys/devices/pci0000:00/0000:00:07.0/virtio2/block/vda/vda2 sys-devices-pci0000:00-0000:00:07.0-virtio2-block-vda-vda5.device loaded active plugged LVM PV 0n7wg5-p5d4-atO8-3eXH-2rqT-dG6Q-fqk0lx on /dev/vda5 5 sys-devices-pci0000:00-0000:00:07.0-virtio2-block-vda.device loaded active plugged /sys/devices/pci0000:00/0000:00:07.0/virtio2/block/vda sys-devices-platform-serial8250-tty-ttyS1.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS1 sys-devices-platform-serial8250-tty-ttyS2.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS2 sys-devices-platform-serial8250-tty-ttyS3.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS3 sys-devices-pnp0-00:04-tty-ttyS0.device loaded active plugged /sys/devices/pnp0/00:04/tty/ttyS0 sys-devices-virtual-block-dm\x2d0.device loaded active plugged /sys/devices/virtual/block/dm-0 sys-devices-virtual-block-dm\x2d1.device loaded active plugged /sys/devices/virtual/block/dm-1 sys-devices-virtual-net-docker0.device loaded active plugged /sys/devices/virtual/net/docker0 sys-subsystem-net-devices-docker0.device loaded active plugged /sys/subsystem/net/devices/docker0 sys-subsystem-net-devices-eth0.device loaded active plugged Virtio network device -.mount loaded active mounted / boot.mount loaded active mounted /boot dev-hugepages.mount loaded active mounted Huge Pages File System dev-mqueue.mount loaded active mounted POSIX Message Queue File System run-rpc_pipefs.mount loaded active mounted /run/rpc_pipefs sys-kernel-debug.mount loaded active mounted Debug File System var-lib-docker-overlay.mount loaded active mounted /var/lib/docker/overlay acpid.path loaded active running ACPI Events Check systemd-ask-password-console.path loaded active waiting Dispatch Password Requests to Console Directory Watch systemd-ask-password-wall.path loaded active waiting Forward Password Requests to Wall Directory Watch acpid.service loaded active running ACPI event daemon apache2.service loaded active running LSB: Apache2 web server atd.service loaded active running Deferred execution scheduler bind9.service loaded active exited LSB: bind9 Domain Name Server (DNS) cgroupfs-mount.service loaded active exited LSB: Set up cgroupfs mounts. console-setup.service loaded active exited LSB: Set console font and keymap cron.service loaded active running Regular background program processing daemon dbus.service loaded active running D-Bus System Message Bus docker.service loaded active running Docker Application Container Engine getty@tty1.service loaded active running Getty on tty1 heimdal-kdc.service loaded active running LSB: Start KDC server ifplugd.service loaded active running LSB: Brings up/down network automatically inetd.service loaded active running Internet superserver kbd.service loaded active exited LSB: Prepare console kdm.service loaded active running LSB: X display manager for KDE keyboard-setup.service loaded active exited LSB: Set preliminary keymap kmod-static-nodes.service loaded active exited Create list of required static device nodes for the current kernel lvm2-monitor.service loaded active exited Monitoring of LVM2 mirrors, snapshots etc. using dmeventd or progress polling lvm2-pvscan@254:5.service loaded active exited LVM2 PV scan on device 254:5 memcached.service loaded active running memcached daemon nagios-nrpe-server.service loaded active running LSB: Start/Stop the Nagios remote plugin execution daemon networking.service loaded active running LSB: Raise network interfaces. nfs-common.service loaded active running LSB: NFS support files common to client and server nfs-kernel-server.service loaded active exited LSB: Kernel NFS server support nscd.service loaded active running LSB: Starts the Name Service Cache Daemon ntp.service loaded active running LSB: Start NTP daemon postfix.service loaded active running LSB: start and stop the Postfix Mail Transport Agent quota.service loaded active exited Initial Check File System Quotas rc-local.service loaded active exited /etc/rc.local Compatibility rpcbind.service loaded active running LSB: RPC portmapper replacement rsyslog.service loaded active running System Logging Service saslauthd.service loaded active exited LSB: saslauthd startup script slapd.service loaded active running LSB: OpenLDAP standalone server (Lightweight Directory Access Protocol) ssh.service loaded active running OpenBSD Secure Shell server stunnel4.service loaded active exited LSB: Start or stop stunnel 4.x (SSL tunnel for network daemons) systemd-fsck@dev-disk-by\x2duuid-61672b11\x2d7a1b\x2d4e63\x2db629\x2df943594ef924.service loaded active exited File System Check on /dev/disk/by-uuid/61672b11-7a1b-4e63-b629-f943594ef924 systemd-journald.service loaded active running Journal Service systemd-logind.service loaded active running Login Service systemd-modules-load.service loaded active exited Load Kernel Modules systemd-random-seed.service loaded active exited Load/Save Random Seed systemd-remount-fs.service loaded active exited Remount Root and Kernel File Systems systemd-setup-dgram-qlen.service loaded active exited Increase datagram queue length systemd-sysctl.service loaded active exited Apply Kernel Variables systemd-tmpfiles-setup-dev.service loaded active exited Create Static Device Nodes in /dev systemd-tmpfiles-setup.service loaded active exited Create Volatile Files and Directories systemd-udev-settle.service loaded active exited udev Wait for Complete Device Initialization systemd-udev-trigger.service loaded active exited udev Coldplug all Devices systemd-udevd.service loaded active running udev Kernel Device Manager systemd-update-utmp.service loaded active exited Update UTMP about System Boot/Shutdown systemd-user-sessions.service loaded active exited Permit User Sessions udev-finish.service loaded active exited Copy rules generated while the root was ro univention-directory-listener.service loaded active exited LSB: Univention Directory Listener Daemon univention-directory-notifier.service loaded active exited LSB: Univention Directory Notifier Daemon univention-directory-policy.service loaded active exited LSB: Univention Directory Policy univention-firewall.service loaded active exited LSB: Univention iptables configuration ● univention-maintenance.service loaded failed failed LSB: Univention Updater univention-management-console-server.service loaded active running LSB: Univention Management Console Server univention-management-console-web-server.service loaded active running LSB: Univention Management Console Web Server univention-network-common.service loaded active exited LSB: save DHCP address in LDAP univention-runit.service loaded active running LSB: Univention process supervision univention-saml.service loaded active running LSB: Univention Security Assertion Markup Language integration univention-system-setup-boot.service loaded active exited LSB: Univention System Setup on boot -.slice loaded active active Root Slice system-getty.slice loaded active active system-getty.slice system-lvm2\x2dpvscan.slice loaded active active system-lvm2\x2dpvscan.slice system-systemd\x2dfsck.slice loaded active active system-systemd\x2dfsck.slice system.slice loaded active active System Slice user.slice loaded active active User and Session Slice acpid.socket loaded active running ACPID Listen Socket dbus.socket loaded active running D-Bus System Message Bus Socket dm-event.socket loaded active listening Device-mapper event daemon FIFOs docker.socket loaded active running Docker Socket for the API lvm2-lvmetad.socket loaded active listening LVM2 metadata daemon socket syslog.socket loaded active running Syslog Socket systemd-initctl.socket loaded active listening /dev/initctl Compatibility Named Pipe systemd-journald-dev-log.socket loaded active running Journal Socket (/dev/log) systemd-journald.socket loaded active running Journal Socket systemd-shutdownd.socket loaded active listening Delayed Shutdown Socket systemd-udevd-control.socket loaded active running udev Control Socket systemd-udevd-kernel.socket loaded active running udev Kernel Socket dev-mapper-vg_ucs\x2dswap_1.swap loaded active active /dev/mapper/vg_ucs-swap_1 basic.target loaded active active Basic System cryptsetup.target loaded active active Encrypted Volumes getty.target loaded active active Login Prompts graphical.target loaded active active Graphical Interface local-fs-pre.target loaded active active Local File Systems (Pre) local-fs.target loaded active active Local File Systems mail-transport-agent.target loaded active active Mail Transport Agent multi-user.target loaded active active Multi-User System network-online.target loaded active active Network is Online network.target loaded active active Network nss-lookup.target loaded active active Host and Network Name Lookups paths.target loaded active active Paths remote-fs-pre.target loaded active active Remote File Systems (Pre) remote-fs.target loaded active active Remote File Systems rpcbind.target loaded active active RPC Port Mapper slices.target loaded active active Slices sockets.target loaded active active Sockets sound.target loaded active active Sound Card swap.target loaded active active Swap sysinit.target loaded active active System Initialization timers.target loaded active active Timers systemd-tmpfiles-clean.timer loaded active waiting Daily Cleanup of Temporary Directories LOAD = Reflects whether the unit definition was properly loaded. ACTIVE = The high-level unit activation state, i.e. generalization of SUB. SUB = The low-level unit activation state, values depend on unit type. 131 loaded units listed. Pass --all to see loaded but inactive units, too. To show all installed unit files use 'systemctl list-unit-files'.
systemctl
is the commandline interface to query or send commands to systemd
. To list also inactive units, use systemctl --all
.
Alternatively, systemd can also list all unit files:
systemctl list-unit-files
Working with services
Check the status of a service:
root@ucs-7125:~# systemctl status apache2.service
example output of systemctl status
● apache2.service - LSB: Apache2 web server
Loaded: loaded (/etc/init.d/apache2)
Active: active (running) since Di 2017-04-04 21:26:50 CEST; 3 weeks 0 days ago
Process: 19639 ExecReload=/etc/init.d/apache2 reload (code=exited, status=0/SUCCESS)
CGroup: /system.slice/apache2.service
├─ 4905 /usr/sbin/apache2 -k start
├─19666 /usr/sbin/apache2 -k start
├─19667 /usr/sbin/apache2 -k start
├─19668 /usr/sbin/apache2 -k start
├─19669 /usr/sbin/apache2 -k start
├─19690 /usr/sbin/apache2 -k start
├─19723 /usr/sbin/apache2 -k start
├─20576 /usr/sbin/apache2 -k start
├─20577 /usr/sbin/apache2 -k start
├─20579 /usr/sbin/apache2 -k start
└─20664 /usr/sbin/apache2 -k start
Apr 26 06:25:25 master systemd[1]: Reloading LSB: Apache2 web server.
Apr 26 06:25:26 master apache2[4500]: Reloading web server: apache2.
Apr 26 06:25:26 master systemd[1]: Reloaded LSB: Apache2 web server.
We can also use the unit commands stop
, start
and restart
in the same fashion.
The schema is always the same:
systemctl <UNIT COMMAND> <UNIT NAME>
systemd comes with autocompletion support for unit commands and for unit names - just TAB along!
Enabling and disabling services
systemd also manages which services are started automatically and which are not. Disabling a service prevents automatic starting:
root@ucs-7125:~# systemctl disable ntp.service
Synchronizing state for ntp.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d ntp defaults
Executing /usr/sbin/update-rc.d ntp disable
Enabling it again:
root@ucs-7125:~# systemctl enable ntp.service
Synchronizing state for ntp.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d ntp defaults
Executing /usr/sbin/update-rc.d ntp enable
A disabled service can still be started manually. To also prevent a manual start, the unit command mask
must be used:
root@ucs-7125:~# systemctl mask ntp.service
Created symlink from /etc/systemd/system/ntp.service to /dev/null.
Unmasking:
root@ucs-7125:~# systemctl unmask ntp.service
Removed symlink /etc/systemd/system/ntp.service.
System commands
Besides units, we can also interact with the whole system:
systemctl rescue Enter system rescue mode
systemctl poweroff Shut down and power-off the system
systemctl reboot Shut down and reboot the system
Analyzing boot
If you run into boot problems, e.g. booting your machine becomes very slow suddenly, systemd has you covered:
systemd-analyze
can analyze the boot process:
root@ucs-7125:~# systemd-analyze time
Startup finished in 6.991s (kernel) + 18.678s (userspace) = 25.669s
root@ucs-7125:~# systemd-analyze critical-chain
example output of systemd-analyze critical chain
The time after the unit is active or started is printed after the "@" character.
The time the unit takes to start is printed after the "+" character.
graphical.target @18.672s
└─multi-user.target @18.672s
└─apache2.service @16.696s +1.975s
└─univention-management-console-web-server.service @7.840s +8.849s
└─univention-management-console-server.service @6.848s +991ms
└─slapd.service @4.579s +2.267s
└─basic.target @4.562s
└─sockets.target @4.562s
└─docker.socket @4.559s +2ms
└─sysinit.target @4.559s
└─nfs-common.service @4.490s +68ms
└─rpcbind.target @4.490s
└─rpcbind.service @4.452s +37ms
└─network-online.target @4.452s
└─network.target @4.452s
└─networking.service @820ms +3.631s
└─local-fs.target @819ms
└─var-lib-docker-overlay.mount @8.026s
└─local-fs-pre.target @753ms
└─systemd-remount-fs.service @735ms +15ms
└─keyboard-setup.service @218ms +516ms
└─systemd-udevd.service @198ms +13ms
└─systemd-tmpfiles-setup-dev.service @158ms +34ms
└─kmod-static-nodes.service @147ms +9ms
└─system.slice @145ms
└─-.slice @145ms
systemd
can also tell you which process took how long to start. This can be done with systemd-analyze blame
.
We can also get a nice SVG image of this via systemd-analyze plot > systemd-analyze.svg
How about logs?
systemd
comes with a system service that collects and stores logging data called journald
. By now, UCS does not yet make use of journald actively (e.g. Univention services still use their own logging mechanism via univention.debug
), but we can still use it for most Debian-based services, e.g. ntp
or the NRPE daemon:
root@ucs-7125:~# journalctl --unit=nagios-nrpe-server.service
Summary
-- Logs begin at So 2017-04-23 18:21:40 CEST, end at So 2017-04-23 18:54:34 CEST. --
Apr 23 18:21:49 ucs-7125 systemd[1]: Starting LSB: Start/Stop the Nagios remote plugin execution daemon...
Apr 23 18:21:50 ucs-7125 nagios-nrpe-server[1363]: Starting nagios-nrpe: nagios-nrpe.
Apr 23 18:21:50 ucs-7125 systemd[1]: PID file /var/run/nagios/nrpe.pid not readable (yet?) after start.
Apr 23 18:21:50 ucs-7125 nrpe[1466]: Starting up daemon
Apr 23 18:21:50 ucs-7125 systemd[1]: Started LSB: Start/Stop the Nagios remote plugin execution daemon.
Apr 23 18:21:50 ucs-7125 nrpe[1466]: Server listening on 0.0.0.0 port 5666.
Apr 23 18:21:50 ucs-7125 nrpe[1466]: Server listening on :: port 5666.
Apr 23 18:21:50 ucs-7125 nrpe[1466]: Listening for connections on port 0
Apr 23 18:21:50 ucs-7125 nrpe[1466]: Allowing connections from: 192.168.122.227
journalctl
also allows us the specify a time range:
root@ucs-7125:~# journalctl --unit=nagios-nrpe-server.service \
--since "2017-04-23 16:45" \
--until "2017-04-23 18:55"
This is quite handy compared to searching and grep
-ing for a timestamp in a strange date format in a text log file.
Of course we can also follow the log, just like tail -f
:
root@ucs-7125:~# journalctl -u nscd.service --follow
What else?
Did I miss something? Do you have additional tips and tricks? Feel free to add them in the comments.