Systemctl

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Gestion des services (systemd)
Commande systemctl
Commandes liées journalctl · hostnamectl ·

localectl · timedatectl · loginctl

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

Voir aussi

  • Chkconfig — ancien outil d'activation au boot, référentiel partagé avec systemctl enable/disable
  • RHEL7 — spécificités de la distribution