Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
sysadmin:linux:systemd:configuration_service [2022/01/02 18:19] – yoann | sysadmin:linux:systemd:configuration_service [2023/12/11 22:14] (Version actuelle) – [Lister les fichiers unité] yoann |
---|
{{tag>sysadmin linux systemd unit services config configuration todo}} | {{tag>sysadmin linux systemd unit services config configuration}} |
| |
====== systemd : configuration des services ====== | ====== systemd : configuration des services ====== |
**systemd** est à la fois un système d'initialisation et un gestionnaire pour les services système. Il est utilisé par de nombreuses distributions GNU/Linux et a finit par s'imposer comme un standard. | **systemd** est à la fois un système d'initialisation et un gestionnaire pour les services système. Il est utilisé par de nombreuses distributions GNU/Linux et a finit par s'imposer comme un standard. |
| |
**systemctl** est le CLI conçu pour contrôler l'initialisation du système. Il permet de gérer les services, vérifier leur état, modifier l'état du système ou encore modifier les fichiers de configuration. | **systemctl** est le CLI permettant d'interagir avec systemd. Il permet de gérer les services, vérifier leur état, modifier l'état du système ou encore modifier les fichiers de configuration. |
| |
Notons que même si systemd est devenu le système d'initialisation par défaut pour de nombreuses distributions, il n'est pas forcément implémenté totalement sur celles-ci. Un message du type ''%%bash: systemctl is not installed%%'' peut être retrourné lors de l'usage d' une fonctionnalité non disponible sur votre distribution | Notons que même si systemd est devenu le système d'initialisation par défaut pour de nombreuses distributions, il n'est pas forcément implémenté totalement sur celles-ci. Un message du type ''%%bash: systemctl is not installed%%'' peut être retrourné lors de l'usage d' une fonctionnalité non disponible sur votre distribution |
| |
''static'' dans ce contexte indique que le fichier unité ne contient pas de section ''install'' ( l'unité ne peut donc pas être activée). Généralement cela signifie que l'unité a une action on/off ou qu'elle est utilisée comme dépendance pour une autre unité et ne devrait pas être exécutée directement. | ''static'' dans ce contexte indique que le fichier unité ne contient pas de section ''install'' ( l'unité ne peut donc pas être activée). Généralement cela signifie que l'unité a une action on/off ou qu'elle est utilisée comme dépendance pour une autre unité et ne devrait pas être exécutée directement. |
| |
| <code bash> |
| # Liste les fichiers unités des services désactivés ou masqués |
| systemctl list-unit-files --type=service --state=disabled,masked |
| </code> |
| |
| |
===== Gestion des unités ===== | ===== Gestion des unités ===== |
systemctl show hostapd.service | systemctl show hostapd.service |
| |
# Affiche la valeur de la propriété ExecStart pour l'unité hostap.service | # Affiche la valeur de la propriété ExecStart pour l'unité hostapd.service |
systemctl show hostapd.service -p ExecStart | systemctl show hostapd.service -p ExecStart |
| |
| # syntaxe avec option longue |
| systemctl show hostapd.service --property PIDFile |
</code> | </code> |
| |
| La commande show permet notamment de retourner les prérequis nécessaires à la bonne exécution d'une unité: |
| |
| <code bash> |
| # Affiche les unités nécessaires à l’exécution de graphical.target |
| systemctl show -p Wants -p Requires graphical.target |
| </code> |
==== Masquer/démasquer une unité ==== | ==== Masquer/démasquer une unité ==== |
| |
===== Modifier un fichier unité ===== | ===== Modifier un fichier unité ===== |
| |
systemd fournit un système pour modifier/éditer les fichiers unité afin ajuster les comportement des unités aux besoins: c'est la commande **edit**: | systemd intègre une commande pour assister la modification des fichiers unité afin ajuster les comportement des unités aux besoins: c'est la commande **edit**: |
| |
| ==== Modifications temporaires ==== |
| |
| Il est possible de modifier puis de charger un fichier unité non persistant: |
| <code bash> |
| systemctl edit --runtime some.service |
| </code> |
| |
| Cette proposition permet d'expérimenter un changement tout en assurant de retrouver un état fonctionnel après redémarrage dans le cas d'un imprévu. |
| |
| ==== snippet ou fragment/extrait ==== |
| |
| Utilisée sans option la commande edit produit un fichier de configuration complémentaire pour l'unité: |
| |
<code bash> | <code bash> |
</code> | </code> |
| |
Sans option, la commande produit un fichier texte vide utilisé pour redéfinir les valeurs par défaut ou ajouter de nouvelles directives pour la définition de l'unité. Un dossier sera créé dans le répertoire ''/etc/systemd/system''. Il sera nommé en fonction de l'unité puis terminé par le suffixe ''.d''. Dans celui-ci un fragment (extrait ou snippet) de fichier de configuration sera enregistré avec le nom ''override.conf''. Quand l'unité sera chargée, les valeurs présentes dans ce fichier seront prioritaires. | C'est un fichier texte vide utilisé pour redéfinir les valeurs par défaut ou ajouter de nouvelles directives pour la définition de l'unité. Un dossier sera créé dans le répertoire ''/etc/systemd/system''. Il sera nommé en fonction de l'unité puis terminé par le suffixe ''.d''. Dans celui-ci un fragment (extrait ou snippet) de fichier de configuration sera enregistré avec le nom ''override.conf''. Quand l'unité sera chargée, les valeurs présentes dans ce fichier seront prioritaires. |
| |
Dans le cas ou l'on souhaite charger l'ensemble des valeurs du fichier unité par défaut, il faut utiliser l'option ''%%--full%%'': | Dans le cas ou l'on souhaite charger l'ensemble des valeurs du fichier unité par défaut, il faut utiliser l'option ''%%--full%%'': |
La commande charge la totalité des valeurs du fichier unité courant dans l'éditeur de texte. Les modifications sont écrites dans le répertoire ''/etc/systemd/system'' qui est prioritaire sur les définitions des unités du système (''/lib/systemd/system'') | La commande charge la totalité des valeurs du fichier unité courant dans l'éditeur de texte. Les modifications sont écrites dans le répertoire ''/etc/systemd/system'' qui est prioritaire sur les définitions des unités du système (''/lib/systemd/system'') |
| |
==== Supprimer les redéfinitions ==== | ==== Identifier les modifications ==== |
| |
| Pour identifier les modifications apportées sur l'ensemble de la configuration des unités de systemd: |
| |
| <code bash> |
| systemd-delta |
| </code> |
| |
| ==== Supprimer les altérations ==== |
| |
Pour supprimer les ajustements, on peut supprimer le dossier contenant les fragments de configuration liés à l'unité ou le fichier unité présent dans le dossier ''/etc/systemd/system'' | Pour supprimer les ajustements, on peut supprimer le dossier contenant les fragments de configuration liés à l'unité ou le fichier unité présent dans le dossier ''/etc/systemd/system'' |
<code bash> | <code bash> |
systemctl daemon-reload | systemctl daemon-reload |
| </code> |
| |
| |
| ==== Restaurer la configuration système ==== |
| |
| Pour restaurer la configuration proposée dans les paquets de la distribution: |
| |
| <code bash> |
| systemctl revert some.service |
</code> | </code> |
| |
| |
Ces commandes préviennent les utilisateurs avec des sessions en cours que le système est arrêté, ce que ne feront pas les commandes d'isolation. | Ces commandes préviennent les utilisateurs avec des sessions en cours que le système est arrêté, ce que ne feront pas les commandes d'isolation. |
| |
| ===== Analyser la phase de démarrage ===== |
| |
| systemd intègre un outils d'analyse du temps de démarrage: |
| <code bash> |
| systemd-analyse time |
| </code> |
| |
| Pour détailler le temps de démarrage par unité: |
| <code bash> |
| systemd-analyse blame |
| </code> |
| |
===== Pour conclure ===== | ===== Pour conclure ===== |
| |
D' autres composants existent dans l'écosystème de systemd. Des fonctionnalités telles que la gestion de la journalisation, des sessions utilisateurs sont controlées par des utilitaire différents respectivement ''journald/journalctl'' et ''logind/loginctl''. | D' autres composants existent dans l'écosystème de systemd. Des fonctionnalités telles que la gestion de la journalisation, des sessions utilisateurs sont controlées par des utilitaire différents respectivement ''journald/journalctl'' et ''logind/loginctl''. |
| |
| |
===== Références ===== | ===== Références ===== |
* https://blog.thewatertower.org/2019/04/24/modifying-systemd-unit-files/ | * https://blog.thewatertower.org/2019/04/24/modifying-systemd-unit-files/ |
* https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units | * https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units |
| * [[https://www.baeldung.com/linux/systemctl-list-enabled-services|systemd : lister les services actifs (baeldung.com)]] |