Linux systemd
Systemd, les services systèmes sous Linux
Systemd successeur de System V, fourni un système/service manager qui est lancé avec le PID 1
(l'init daemon) et démarre le reste du système.
Systemd fourni également un nombre impressionnant d’outils (avec ses pros & cons), ce n'est donc pas uniquement un init system, mais bien un gestionnaire avec un ensemble de services. Il est le sysème d'init par défaut dans Debian depuis Jessie (Debian 8).
Systemd est un gestionnaire de systèmes et de services pour les systèmes d'exploitation Linux. Il est conçu pour être rétro-compatible avec les scripts SysV init, et fournit un certain nombre de fonctionnalités, comme le lancement en parallèle des services système pendant l'initialisation, l'activation des démons à la demande, la prise en charge des instantanés d'état du système, ou la logique de contrôle de service basée sur dépendances.
- RedHat
systemd is a system and service manager for Linux operating systems. When run as first process on boot (as PID 1), it acts as init system that brings up and maintains userspace services. Separate instances are started for logged-in users to start their services.
- man systemd
Les commandes de gestion principales
Les commandes suivantes permettent de gerer les différents composants de systemd :
systemctl
: permet d'envoyer des commandes a systemd (manager)journalctl
: journal centralisé de systemd (et donc des services)timedatectl
: date/heure du serveurhostnamectl
: nom de la machinelocalectl
: configuration des locales et du clavierloginctl
: login manager
systemctl
Pour gérer les services (start
, stop
, restart
, status
) sur un système Linux disposant de systemd
, nous pouvons utiliser la commande systemctl
(anciennement service
).
Ces services sont créés/paramétrés via des fichiers de configuration se trouvant dans /etc/systemd/system/
ce qui permet de créer simplement soi-même des services pour lancer par ex une application web au démarrage du système.
Liste des commandes systemctl
systemctl list-units --failed # services en échec
systemctl list-unit-files # ensemble des services installés et leurs status
systemctl status # arborescence
systemctl status nom-du-service # état du service et ses options/infos de démarrage
systemctl status/start/stop/restart/reload nom-du-service # gestion d'un service
systemctl enable/disable nom-du-service # activation/désactivation d'un service
systemctl -p LogLevel show # affiche le LogLevel de systemd
systemd-analyze set-log-level notice # modifier le LogLevel jusqu'au prochain reboot
systemctl daemon-reexec # redémarrage du service systemctl (sans rebooter)
systemctl daemon-reload # pour prendre en compte une modification de .service
journalctl
Les services gérés par systemd ont leurs logs accessible par défaut via la commande journalctl
.
Pour lister les entrées du journal d’aujourd’hui spécifique au service spécifié par l’option -u nom-service.service
(le .service
peut etre omis).
Pour éviter de devoir sudo
il faut faire parti de l'un des groupes adm
ou systemd-journal
(voir Gestion des groupes d'utilisateurs)
journalctl -u nginx # filtrer par nom de service
journalctl -f # follow
journalctl -n 50 # nombre de lignes
journalctl --since today # --since ou -S
journalctl --until yesterday # --until ou -U
## Exemples
# events de nginx sur la dernière heure
journalctl -u nginx --output=short-full -S -1h
# tous les events loggés les 10 dernières minutes
journalctl -S -10m
Temps
Pour la spécification du temps (-S
ou -U
) il est possible de spécifier :
- "yesterday", "today", "tomorrow", "now"
- une durée relative avec
-
ou+
un chiffre et une unité de temps : • usec, us, µs • msec,ms
• seconds, second, sec,s
• minutes, minute, min,m
• hours, hour, hr,h
• days, day,d
• weeks, week,w
• months, month,M
(defined as 30.44 days) • years, year,y
(defined as 365.25 days)
voir man systemd.time
pour plus d'infos sur les formats de date
Gestion du journal
journalctl --verify
journalctl --disk-usage
Vider le journal
journalctl --vacuum-time=2d
journalctl --vacuum-size=500M
timedatectl
la commande timedatectl
qui permet de lire et modifier la date/heure/fuseau horaire :
sudo timedatectl
sudo timedatectl list-timezones
sudo timedatectl set-timezone Europe/Paris
sudo dpkg-reconfigure tzdata
Binaires
Voici par exemple la liste des binaires systemd présents sur un système Raspberry Pi OS:
bluetoothctl
bootctl
busctl
cec-ctl
cx18-ctl
hostnamectl <=
ir-ctl
ivtv-ctl
journalctl <=
keyctl
localectl <=
loginctl <=
media-ctl
networkctl <=
obexctl
rds-ctl
resolvectl <=
systemctl <=
timedatectl <=
udisksctl
v4l2-ctl
wdctl
Liens
- Évolutions techniques de systemd sur linuxfr.org 👍 et interview de son créateur Lennart Poettering
- Conceptes - wikipedia
- How to use Systemctl
- Configurer un redémarrage de service au reboot et après un crash
- systemd de l'ArchWiki
Videos
- We Need to Talk About Systemd: Boot Time Optimization for the New init daemon - Chris Simmonds, 2net
- Why Systemd is the Devil but I Love It
- Systemd Is Hated By Many, But Does It Deserve It?