« Systemd » : différence entre les versions
De Banane Atomic
Aller à la navigationAller à la recherche
(Une version intermédiaire par le même utilisateur non affichée) | |||
Ligne 162 : | Ligne 162 : | ||
# affiche tous les messages de l'avant dernier boot | # affiche tous les messages de l'avant dernier boot | ||
journalctl -b -1 | journalctl -b -1 | ||
# | # list the known boots | ||
journalctl -- | journalctl --list-boots | ||
# | |||
# display messages from today | |||
journalctl --since today | |||
# 10 minutes ago | |||
journalctl --since "10 minutes ago" | journalctl --since "10 minutes ago" | ||
# between 2 dates | |||
journalctl --since "2021-01-30" --until "2021-01-31 18:30" | |||
# affiche les messages de l'unité logrotate | # affiche les messages de l'unité logrotate |
Dernière version du 4 juin 2021 à 20:04
Commandes
Services
# Démarrer une unité sudo systemctl start <unit> # Arrêter une unité sudo systemctl stop <unit> # Redémarrer une unité sudo systemctl restart <unit> # Inclure un service au démarrage sudo systemctl enable <service_name> # Retirer un service du démarrage sudo systemctl disable <service_name> # tester si un service va être lancé au démarrage systemctl is-enabled <service_name> # test si un service fonctionne systemctl is-active <service_name> if (systemctl is-active --quiet <service_name>); then sudo systemctl start <service_name> fi |
Debug
# Lister les unités en fonctionnement systemctl # Lister les unités qui ont échouées systemctl --failed # Liste les unités installées, et indique celles qui sont chargées systemctl list-unit-files # Les fichiers des unités sont dans /usr/lib/systemd/system/ et /etc/systemd/system/ # filter avec | grep enabled # Tester l'état d'un service systemctl status <service_name> # Afficher le contenu du fichier chargé pour un service donné systemctl cat <service_name> # Afficher le dépendances systemctl list-dependencies <service_name> # lancer directement le service en debug SYSTEMD_LOG_LEVEL=debug /lib/systemd/<service_name> |
Arrêt du système
# arrêt de la machine systemctl poweroff # redémarrer systemctl reboot # mise en veille systemctl suspend # hibernation systemctl hibernate # combinaison de la mise en veille et de l'hibernation systemctl hybrid-sleep |
Les utilisateurs d'une session locale peuvent utiliser des commandes lié à l'arrêt du système sans sudo grâce à polkit Allow Users to Shutdown |
Fichiers services
/usr/lib/systemd/system | units provided by installed packages |
/etc/systemd/system | units installed by the system administrator |
Options
Type
simple | si le processus configuré dans ExecStart est le processus principal du service. |
forking | si le processus configuré dans ExecStart va faire appel à fork(). Le processus parent se terminera à la fin du démarrage du service. Le processus fils devient le processus principal. |
oneshot | équivalent à simple, toutefois le processus principal doit se terminer avant que systemd ne démarre les unités suivantes. Possibilité d'utiliser RemainAfterExit. |
dbus | équivalent à simple, toutefois le service obtient un nom sur D-Bus tel que configuré dans BusName. |
notify | équivalent à simple, toutefois le service envoie une notification à la fin du démarrage. |
idle | équivalent à simple, toutefois l’exécution du service est retardé jusqu'à la répartition de tous les active jobs. |
Étendre la configuration d'un service sans écraser la configuration par défaut
Optimisation
# temps de démarrage systemd-analyze # graphique des temps de chargement systemd-analyze plot > plot.svg; firefox plot.svg |
Timers
systemctl enable myunit.timer systemctl start myunit.timer systemctl is-enabled myunit.timer systemctl is-active myunit.timer systemctl list-timers systemctl --user list-timers |
/etc/systemd/system/myunit.timer |
[Unit] Description=Run foo weekly # Monotonic timer: se déclenche 15mn après le démarrage puis toutes les semaines [Timer] OnBootSec=15min OnUnitActiveSec=1w # Realtime timer: se déclenche toutes les semaines [Timer] OnCalendar=weekly Persistent=true [Install] WantedBy=timers.target |
/etc/systemd/system/myunit.service |
[Unit] Description=... [Service] Type=oneshot # systemd still considers the service as active after the process has exited RemainAfterExit=yes ExecStart=... ExecStart=... ExecStartPost=... |
Services par utilisateurs
~/.config/systemd/user/myunit.service |
systemctl --user start myunit |
journalctl
# affiche tous les messages depuis le boot journalctl -b # affiche tous les messages de l'avant dernier boot journalctl -b -1 # list the known boots journalctl --list-boots # display messages from today journalctl --since today # 10 minutes ago journalctl --since "10 minutes ago" # between 2 dates journalctl --since "2021-01-30" --until "2021-01-31 18:30" # affiche les messages de l'unité logrotate journalctl -u logrotate # affiche les messages de priorités 4 (warning) et au-dessus journalctl -p 4 # emerg (0), alert (1), crit (2), err (3), warning (4), notice(5), info (6), debug (7) # affiche les messages concernant gdm journalctl -b -p 5 --no-pager | grep gdm # affiche les messages en temps réel journalctl -f # connaître la place prise par les logs journalctl --disk-usage # Retain the logs of the last 30 days sudo journalctl --vacuum-time=30d # Retain only the past 40 MB journalctl --vacuum-size=40M # coloration de l'affichage journalctl -b | ccze -A | less |
How To Use Journalctl to View and Manipulate Systemd Logs
Configuration
/etc/systemd/journald.conf |
# Specifies the maximum disk space that can be used by the journal in persistent storage. # par défaut 10% de la partition SystemMaxUse=100M # Specifies the maximum disk space that can be used in volatile storage (within the /run filesystem). RuntimeMaxUse=100M |
Compatibilité avec syslog
« journal » remplace « syslog » mais certain programmes (Postfix) continue à utiliser explicitement syslog et ont besoin que celui-ci soit installé et démarré pour pouvoir loguer dans des fichiers (sinon tous va dans le journal).
pacman -S syslog-ng systemctl enable syslog-ng |
Target comme kernel parameter
systemd.unit=multi-user.target # Multi-user, non-graphical |
Erreurs
Failed to get D-Bus connection: No connection to service manager.
systemd n'est pas chargé → Chargez systemd.
Migrer d'initscript vers systemd
Chargez systemd
# installez systemd-sysvcompat sudo pacman systemd-sysvcompat # ou au boot, éditer grub (e) # et ajouter init=/bin/systemd |
Redémarrez
(GDM ne devrait pas se lancer car systemd n'utilise pas /etc/inittab)
Remplacez les DAEMONS par les unités systemd
dbus et alsa sont chargés automatiquement.
systemd possède son propre mécanisme de journalisation, syslog n'est plus requis par défaut.
# Pour chaque daemon du fichier /etc/rc.conf, # utilisez la commande suivant pour inclure le service au démarrage dans systemd sudo systemctl enable <service_name> # Exemples # syslog-ng sudo systemctl enable syslog-ng.service # networkmanager sudo systemctl enable NetworkManager.service sudo systemctl enable NetworkManager-wait-online.service # crond sudo systemctl enable cronie.service # cupsd sudo systemctl enable cups.service # mysqld sudo systemctl enable mysqld.service # httpd sudo systemctl enable httpd.service |
Équivalent systemd des daemons initscript
GDM
systemd n'utilise pas le fichier /etc/inittab.
sudo systemctl enable gdm.service |