Systemctl
| Fiche express | |
|---|---|
| Domaine | Gestion des services (systemd) |
| Commande | systemctl
|
| Commandes liées | journalctl · hostnamectl ·
|
| Units fournies (paquets) | /usr/lib/systemd/system/
|
| Units admin (surcharge locale) | /etc/systemd/system/
|
| Voir aussi | Chkconfig (legacy, référentiel commun avec enable/disable) |
systemd est le système d'init de RHEL7+ (et de la plupart des distributions récentes),
remplaçant SysV init / service. Apports principaux : parallélisation du boot,
activation de services à la demande (sockets), gestion fine des dépendances entre services
(évite par exemple de bloquer au boot sur un réseau pas encore monté), et intégration des
cgroups pour limiter les ressources par service. systemctl est la commande unique pour
piloter les services (remplace service) ; elle ne contredit pas
chkconfig mais partage le même référentiel d'activation.
Lister et inspecter les services
systemctl # liste des units actives
systemctl --type=service # uniquement les services
systemctl list-units --type=socket --all # sockets, y compris inactifs
systemctl list-unit-files --type=service # tous les services connus (activés ou non)
systemctl --failed # units en échec
systemctl status sshd.service # état détaillé d'un service
systemctl status sshd.service -l # sans troncature des lignes longues
systemctl -H root@rhel7.example.com status httpd.service # à distance (via SSH)
Démarrer, arrêter, activer
systemctl start foo
systemctl stop foo
systemctl restart foo
systemctl daemon-reload # après modification d'un fichier unit
systemctl enable httpd.service # démarrage automatique au boot
systemctl disable NetworkManager
systemctl is-enabled foo
systemctl is-active ntpd
Masquer un service crée un lien symbolique vers /dev/null : utile pour
empêcher tout démarrage, même manuel ou par dépendance, sans juste le désactiver.
systemctl mask network
systemctl unmask network
Dépendances — savoir ce qu'un redémarrage de service va entraîner :
systemctl list-dependencies UNIT
systemctl list-dependencies UNIT --reverse # qui dépend de UNIT
Créer un service manuellement
Les fichiers *.service (units) se trouvent dans deux emplacements, le second prenant le pas sur le premier :
/usr/lib/systemd/system/: units fournies par les paquets installés/etc/systemd/system/: units ou surcharges de l'administrateur
Référence complète du format unit : https://www.freedesktop.org/software/systemd/man/systemd.unit.html
Runlevels (targets)
systemd remplace les runlevels SysV par des targets :
systemctl isolate multi-user.target # équivalent runlevel 3 (multi-utilisateur, sans GUI)
systemctl isolate runlevel3.target # alias identique
systemctl isolate graphical.target # équivalent runlevel 5 (avec GUI)
systemctl rescue # équivalent runlevel 1 (mode secours)
systemctl get-default # target par défaut au boot
systemctl set-default multi-user.target
TTY virtuels
vi /etc/systemd/logind.conf # ajuster NAutoVTs=8 pour le nombre de tty auto
systemctl enable getty@tty8
systemctl start getty@tty8
systemctl stop getty@tty8
systemctl disable getty@tty8
Journaux (journalctl)
journalctl # tous les journaux
journalctl -b # depuis le dernier boot
journalctl -f # suivi en direct (comme tail -f)
journalctl /sbin/crond # journaux d'un exécutable donné
journalctl -p err # niveau de priorité minimum (voir échelle ci-dessous)
journalctl --since=today
journalctl --since="2013-03-16 23:59:59" --until="2013-03-17 12:00:00"
journalctl -F fieldname # valeurs possibles d'un champ
journalctl fieldname=valeur
journalctl _UID=70 _SYSTEMD_UNIT=avahi-daemon.service
Échelle des priorités (-p) : emerg(0), alert(1),
crit(2), err(3), warning(4), notice(5),
info(6), debug(7).
Par défaut le journal ne survit pas au reboot (stocké en mémoire volatile). Pour le rendre persistant :
mkdir -p /var/log/journal
chown root:systemd-journal /var/log/journal
chmod 2755 /var/log/journal
killall -USR1 systemd-journald
Compromis : conserve l'historique entre reboots et pour du débogage à froid, au prix d'espace disque et mémoire supplémentaire.
Cgroups et limites de ressources
systemd-cgls # hiérarchie complète des cgroups
systemd-cgtop # charge CPU/mémoire/IO par cgroup
systemctl kill httpd # tuer tous les process d'un service
systemctl set-property httpd.service CPUShares=500 # limiter les ressources
systemctl show -p CPUShares httpd.service # vérifier la valeur appliquée
Utilitaires annexes
hostnamectl
hostnamectl set-hostname rhel7
localectl
localectl set-locale LANG=en_GB.utf8
localectl set-keymap en_GB
localectl set-x11-keymap en_GB
timedatectl
timedatectl set-time "YYYY-MM-DD HH:MM:SS"
timedatectl list-timezones
timedatectl set-timezone Europe/Paris
loginctl list-users
loginctl list-sessions
loginctl show-user tom
Analyse du démarrage
systemd-analyze # temps total de boot
systemd-analyze time # détail kernel/userspace
systemd-analyze blame # services les plus lents au démarrage
Nettoyage
systemd-tmpfiles --clean # applique les règles de purge de /etc/tmpfiles.d/ immédiatement