Skip to content

Systemd (Cheat sheet)lien

… « c’étaient mieux avant ? ;-) » - peu importe - , de toutes les façons on n’y coupe pas (désormais toutes les distributions?)! … et il faut reconnaître que «le machin qui fait tout» … le fait pas mal!

infos généraleslien

systemd: carte d’identité

  • le 1er processus (ps --pid 1)
  • la commande: systemctl
  • Tout est Unit (brique de base)
  • les Units encapsulent divers objets , ces objets :
    • deux états : actif/inactif
    • dépendances: Requires = /Conflicts =
    • ordonnancement: After= / Before=
  • journald: journaux, logs associés à systemd
  • la commande: journalctl

Fichiers de conf:

  • /etc/systemd/system.conf
  • /lib/systemd/system ou /usr/lib/systemd/system c
  • /etc/systemd/system
  • /etc/systemd/user

Différents types d’Unit:

systemctl list-units –type LE-TYPE

Type (.fichier) Description)
Service (.service) daemon etc.
Socket (.socket) comm. inter-processus ou socket ou FIFO en lien avec un unit service
Target (.target) groupe d’unit’ ou poitn de synchro pdt la phase d’amorçage ( ex: cf runlevel)
Device (.device) représente un fichier de périphérique présent dans l’arboresc. udev/sysfs
Timer (.timer) ex: les opérations de nettoyag ( tmp, php etc.)
Mount (.mount) tous les pts de montages
Automount (.automount) (idem mais auto)
Swap (.swap) activation d’un _unit service
Path (.path) quand il nécessaire qu’un _path_soit monitoré par systemd (ex typique: les spool)
Slice (.path) association de processus
Scope (.path) ex: sessions

exemples pratiqueslien

arrêter , démarrer un service (immédiatement ou au démarrage machine)lien

  • systemctl start nginx ( /etc/init.d/nginx start )
  • systemctl stop nginx ( /etc/init.d/nginx stop )
  • systemctl restart nginx ( /etc/init.d/nginx restart )

  • systemctl enable nginx ( update-rc.d nginx enable)

  • systemctl disable nginx ( update-rc.d nginx remove)

observer consulterlien

Un service :

  • systemctl is-enabled nginx
  • systemctl status nginx
  • systemctl show nginx
  • systemctl list-dependencies nginx.service

  • systemctl list-units ( liste toutes les units triées par Type (path,mount, service,socket etc.)

  • systemctl list-units --all
  • systemctl list-units --type=service
  • systemctl list-units --all --state=failed
  • systemctl list-units --all --state=failed

liste des cible disponibles:
systemctl list-units --type target --all

liste des units associées à une cible
systemctl list-dependencies --after graphical.target

  • systemctl list-units --type timer
  • systemctl show systemd-tmpfiles-clean.timer

Autres exemples utiles (?)lien

Quand on préfère gérer soi-même la config réseau

  • systemctl disable NetworkManager.service
  • systemctl stop NetworkManager.service

… quand on est pas f… de le faire correctement: (récupérer le réseau via une console! sur KVM) ;-)

  • systemctl enable getty@ttyS0.service
  • systemctl start getty@ttyS0.service …(virsh console la_vm !)

Pratique(?): où se trouve le fichier de conf (démarrage)?

systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; disabled; vendor preset: enabled)   # <= ICI !!!!
   Active: inactive (dead)
     Docs: man:nginx(8)
less /lib/systemd/system/nginx.service 
# Stop dance for nginx
# =======================
#
# ExecStop sends SIGSTOP (graceful stop) to the nginx process.
# If, after 5s (--retry QUIT/5) nginx is still running, systemd takes control
# and sends SIGTERM (fast shutdown) to the main process.
# After another 5s (TimeoutStopSec=5), and if nginx is alive, systemd sends
# SIGKILL to all the remaining processes in the process group (KillMode=mixed).
#
# nginx signals reference doc:
# http://nginx.org/en/docs/control.html
#
[Unit]
Description=A high performance web server and a reverse proxy server
Documentation=man:nginx(8)
After=network.target  =============> Ne pas lancer nginx tant «network.target» n'est pas démarrée

[Service]
Type=forking       =================> simple | forking | oneshot | dbus | notify | idle 
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed

[Install]
WantedBy=multi-user.target     =====>  Création d'un lien symbolique /etc/systemd/system/multi-user.target.wants

runlevellien

Avant maintenant
who -r («niveau d’exécution 5 …)» systemctl get-default («graphical.target»)
update-rc.d -f lightdm remove systemctl set-default multi-user.target
systemd SysV
shutdown.target runlevel 0 (arrêt)
rescue.target runlevel 1 (mode secours)
multi-user.target runlevel 3 (multi user sans serveur graphique)
graphical.target runlevel 5 (id. mais mode graphique: gdm, lightdm etc.)
reboot.target runlevel 6 (rédémrarrge du système)

sysV init -> systemd : «convertisseur» ?lien

…rencontrer par hasard : à explorer…

systemctl enable memcached.service Synchronizing state of memcached.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable memcached

journauxlien

  • journalctl -b: message du démarrage courant (messages noyaux)
  • journalctl -b -p -err: messages du démarrage ayant la priorité err ( ou supérieure )
  • journalctl -u nginx: messages ayant trait à l’unit nginx
  • journalctl -p err -u nginx:
  • journalctl -xn : ( affiche les derniers évènements ) : commande indiquée en toute lettres (lorsqu’on tente de démarrer un service dont la config est en erreur! ;-))

Source:lien

https://indico.math.cnrs.fr/event/2317/session/22/contribution/27/material/slides/0.pdf (merci Benoit!)