Développeur FullStack & Devops

Notes et mémos techniques

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 serveur
  • hostnamectl: nom de la machine
  • localectl: configuration des locales et du clavier
  • loginctl: login manager

interfaces de Noyau Linux, unified hierarchy cgroups et systemd source

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

Videos

journalctl
linux
service
systemctl
systemd
init
linux
rédigé le 25/03/19, mis à jour le 22/03/22 par Behrouze
A proposCheat SheetsOutilsVidéos