Systemd depuis la 16.04

Systemd est la version linux de init system V. Fedora, Mageia, Open SUSE et Debian l'utilisent aussi.

sudo systemctl disable apache2  apache2 ne se lance plus au boot.

Systemd (depuis la 16.04) - https://doc.ubuntu-fr.org/systemd

Selon les versions de Ubuntu

de Ubuntu 6 à 12 : Upstart (gère taches systèmes et les services, par ex Plymouth, réseau... )

Systemd (depuis la 16.04). Version linux de init system V.

Une version graphique existe : apt-get install systemd-ui

Systemd (intro)

Systemd gère aussi de plus le montage et "The Journal". Cf https://wiki.debian.org/systemd en anglais et en FR sur linuxfr.org voir systemd (2015)
A la notion d'unité : fichier de conf, service (*.service), une cible (*.target), un montage (*.mount), un socket (*.socket)…

Au boot, les services utilisent les options définies par défaut (que "systemctl start/stop/status/restart/reload service" ne modifient pas)

$ systemd --version
systemd 229
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN

J'ai la v229 en avril 2017 (et mai 2018), et 237 en fev 2020.

systemctl

liste des services démarrés: systemctl list-unit-files | grep service | sort  ou   systemctl list-unit-files --type=service | grep enabled

Que signifient les valeurs ? J'y vois du : enabled, disabled, static, generated, masked, enabled-runtime, indirect (pour portmap.service, rpcbind.service, saned@.service et uuidd.service)

  • mask est plus fort que disable. Avec disable tous les liens symlinks du fichier unit (donné en arg) sont effacés. Avec mask les units vont vers /dev/null. C'est ce qui est montré par ex avec systemctl status halt.service. L'avantage de mask est d'éviter toute activation même manuelle.
  • Plus à https://www.computernetworkingnotes.com/linux-tutorials/systemd-units-ex... (date de 2019) :
    "Si une unité est dans l'état désactivé ou activé, vous pouvez changer son état à partir de la commande "systemctl enable/disable". Mais si une unité est à l'état statique, vous ne pouvez pas changer son état. Techniquement, si une unité est à l'état statique, cela signifie que l'unité n'a pas la section "install" dans son fichier de configuration qui est nécessaire pour démarrer une unité au moment du démarrage.
  • plus à https://www.computernetworkingnotes.com/linux-tutorials/systemd-unit-con...

list-units

Un fichier unit est un fichier de type ini en texte clair qui encode des informations sur un service, une socket, un périphérique, un point de montage, un point de montage automatique, un fichier swap ou une partition, une cible de démarrage (start-up target), un chemin de système de fichiers surveillé, un timer contrôlé et supervisé par systemd, une tranche de gestion des ressources (resource management slice) ou un groupe de processus créés en externe.

$ systemctl list-units
UNIT                         LOAD   ACTIVE SUB     DESCRIPTION
atd.service                  loaded active running ATD daemon
avahi-daemon.service         loaded active running Avahi mDNS/DNS-SD Stack
...
$ systemctl status avahi-daemon.service

avec:

  • UNIT/UNITÉ: Le systemd nom de l'unité
  • LOAD/CHARGE: La question de savoir si la configuration de l’appareil a été analysée par systemd. La configuration des unités chargées est gardée en mémoire.
  • ACTIVE: Un état récapitulatif pour savoir si l’unité est active. Il s'agit généralement d'une façon assez basique de dire si l'appareil a démarré avec succès ou pas.
  • SUB: Il s’agit d’un état de niveau inférieur qui indique plus d’informations sur l’unité (ex: running, plugged, mounted, waiting, exited, elapsed...). Cela varie souvent par type d'unité, État, et la méthode actuelle, dans laquelle l'appareil fonctionne.
  • DESCRIPTION: Une courte description de ce que l’unité est.

 

$ systemctl list-units | grep service | sort                                                                               

accounts-daemon.service          loaded active running   Accounts Service
...
user@1000.service                loaded active running   User Manager for UID 1000
vboxautostart-service.service    loaded active exited    LSB: VirtualBox autostart service
vboxballoonctrl-service.service  loaded active exited    LSB: VirtualBox watchdog daemon
vboxdrv.service                  loaded active exited    LSB: VirtualBox Linux kernel module
vboxweb-service.service          loaded active exited    LSB: VirtualBox web service API
vmware.service                   loaded active running   LSB: starts and stops VMware services
vmware-USBArbitrator.service     loaded active running   LSB: starts and stops the USB Arbitrator
whoopsie.service                 loaded active running   crash report submission daemon

Voir ceux qui ont échoué: systemctl --failed

 

actions sur les unités

Activer / Désactiver : sudo systemctl enable unservice.service  /  sudo systemctl disable unservice.service

désactiver le service « dropbox » (au niveau user) : systemctl --user disable dropbox

Les cibles (targets)

Il est possible de regrouper plusieurs unités dans une unité spéciale dont le nom d'extension est target (cible).
Cela permet de reproduire le fonctionnement des niveaux d’exécution (runlevels de SysVinit).

systemctl list-units --type=target -all

 


logs "The Journal" avec journalctl

Consulter les messages d'un seul service par son nom, son PID ou même son exécutable :

journalctl -u wicd
journalctl _PID=1
journalctl /usr/sbin/dhcpcd

journalctl permet aussi de filtrer par le niveau de log (tel que défini par syslog). Pour n'afficher que les erreurs : journalctl -p err
Il existe un logiciel graphique nommé Gnome-logs

systemctl status <nom_du_service> montre aussi les logs récents

par date

journalctl --since="today"
journalctl --since="AAAA-MM-JJ hh:mm:ss" --until=
"AAAA-MM-JJ hh:mm:ss"
relatif au dernier boot (-b) avec les messages explicatifs (-x) : journalctl -xb

 

systemd-analyze

liste des services lancés au démarrage, triés selon leur temps d’exécution : systemd-analyze blame

Légende de systemd-analyze plot &gt; plot.svgavoir un graphique: systemd-analyze plot > plot.svg
La légende, en bas à gauche n'est pas facilement trouvable, mais c'est hyper utile :) La 1ere fois, l'abscisse montre que cela dure 53s.

systemd-analyze critical-chain

systemctl

  • désactiver/activer un service (au boot suivant) : systemctl disable <Nom_du_service>.service   /   systemctl enable <Nom_du_service>.service
  • voir l'arborescence des dépendances de l'unité : systemctl show sshd.service
  • voir les actifs et non-actifs : systemctl --all
 
$ systemctl --failed
0 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

autres commandes

systemd-cgls : Affiche de manière récursive le contenu de la hiérarchie des cgroups de Linux sélectionnée dans une arborescence. Montre les processus par leur cgroup et ainsi leur service, car systemd nomme les cgroups d’après les services.

systemd-delta : Utilisé pour identifier et comparer des fichiers de configuration de /etc, qui ont leur correspondance par défaut dans /usr

processus et systemd

http://linuxfr.org/news/systemd-pour-les-administrateurs-partie-1-et-2

ps xawf -eo pid,user,cgroup,args
  • 3e colonne : cgroup systemd assigné à chaque processus.
  • les processus udev sont rassemblés dans le cgroup name=systemd:/systemd-1/sysinit.service. C’est le cgroup utilisé pour tous les processus démarrés par le service sysinit.service, qui s’occupe du début du démarrage.

création d'un alias : alias psc='ps xawf -eo pid,user,cgroup,args'

 

Modifier

si vous souhaitez modifier l'état d'un service selon certaines conditions, vous devrez modifier ou créer le fichier /etc/systemd/system/<nom_du_service>.service. Les fichiers de configuration par défaut se trouvent dans /lib/systemd/system/

 

Plus sur le web

sur https://askubuntu.com/ : votes freq et Cookbook

 

https://freedesktop.org/wiki/Software/systemd/ et leur tips
https://wiki.ubuntu.com/SystemdForUpstartUsers https://wiki.ubuntu.com/systemd

https://docs.docker.com/config/daemon/systemd/ (cf /etc/docker/daemon.json)

 

de 2015 : https://www.tecmint.com/manage-services-using-systemd-and-systemctl-in-l...

systemd-analyze plot > plot.svg montre le temps en abs et le travail de systemd