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 nginxsystemctl status nginxsystemctl 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 --allsystemctl list-units --type=servicesystemctl list-units --all --state=failedsystemctl 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 timersystemctl 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.servicesystemctl 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.servicesystemctl 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 nginxjournalctl -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!)