Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
sysadmin:linux:systemd:configuration_service [2021/12/31 13:38] – créée yoann | sysadmin:linux:systemd:configuration_service [2023/12/11 22:14] (Version actuelle) – [Lister les fichiers unité] yoann | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | {{tag> | + | {{tag> |
====== systemd : configuration des services ====== | ====== systemd : configuration des services ====== | ||
+ | |||
+ | **systemd** est à la fois un système d' | ||
+ | |||
+ | **systemctl** est le CLI permettant d' | ||
+ | |||
+ | Notons que même si systemd est devenu le système d' | ||
+ | |||
+ | ===== Gestion des services ===== | ||
+ | |||
+ | Le but d'un système d' | ||
+ | |||
+ | Dans systemd la cible de la plupart des actions sont les " | ||
+ | |||
+ | Pour les taches de gestion des services, l' unité cible sera de type unité de service (service units) et le fichier d' | ||
+ | |||
+ | ==== Démarrage et arrêt d'un service ==== | ||
+ | |||
+ | Pour démarrer un service systemd et exécuter les instruction de son fichier d' | ||
+ | |||
+ | <code bash> | ||
+ | # Démarrage de l' | ||
+ | systemctl start lightdm.service | ||
+ | |||
+ | # pour les commandes de gestion de service telle que start | ||
+ | # systemd consulte tous les fichiers unités *.service | ||
+ | # le suffixe peut être omis | ||
+ | systemctl start lightdm | ||
+ | </ | ||
+ | |||
+ | Pour arrêter un service, on utilise sans surprise la commande **stop**: | ||
+ | <code bash> | ||
+ | systemctl stop lightdm.service | ||
+ | </ | ||
+ | |||
+ | ==== Redémarrage et rechargement ==== | ||
+ | |||
+ | Pour redémarrer un service en cours d' | ||
+ | <code bash> | ||
+ | systemctl restart isc-dhcp-server.service | ||
+ | </ | ||
+ | |||
+ | Certains services sont capables de recharger à chaud leurs fichiers de configuration sans redémarrage dans ce cas on peut utiliser la commande reload: | ||
+ | |||
+ | <code bash> | ||
+ | systemctl reload nfs-server.service | ||
+ | </ | ||
+ | |||
+ | ==== Activer/ | ||
+ | |||
+ | Les commandes précédentes sont utiles pour gérer les services pendant la session en cours. Pour indiquer à systemd de démarrer automatiquement un service au prochain démarrage, il faut l' | ||
+ | |||
+ | <code bash> | ||
+ | systemctl enable isc-dhcp-server.service | ||
+ | </ | ||
+ | |||
+ | Pour qu'un service ne soit plus démarré automatiquement lors du démarrage du système, utiliser la commande disable: | ||
+ | |||
+ | <code bash> | ||
+ | systemctl disable isc-dhcp-server.service | ||
+ | </ | ||
+ | |||
+ | ==== Vérifier l' | ||
+ | |||
+ | Pour vérifier l' | ||
+ | <code bash> | ||
+ | systemctl status isc-dhcp-server.service | ||
+ | </ | ||
+ | |||
+ | La commande retournera l' | ||
+ | |||
+ | La commande d' | ||
+ | < | ||
+ | ● isc-dhcp-server.service - LSB: DHCP server | ||
+ | | ||
+ | | ||
+ | Docs: man: | ||
+ | Process: 1137 ExecStart=/ | ||
+ | Tasks: 4 (limit: 9399) | ||
+ | | ||
+ | CPU: 50ms | ||
+ | | ||
+ | | ||
+ | |||
+ | janv. 02 11:29:20 nucleus dhcpd[1225]: | ||
+ | janv. 02 11:29:20 nucleus dhcpd[1225]: | ||
+ | janv. 02 11:29:20 nucleus dhcpd[1225]: | ||
+ | janv. 02 11:29:20 nucleus dhcpd[1225]: | ||
+ | janv. 02 11:29:22 nucleus isc-dhcp-server[1137]: | ||
+ | janv. 02 11:29:22 nucleus systemd[1]: Started LSB: DHCP server. | ||
+ | janv. 02 11:37:34 nucleus dhcpd[1225]: | ||
+ | janv. 02 11:37:34 nucleus dhcpd[1225]: | ||
+ | janv. 02 11:37:34 nucleus dhcpd[1225]: | ||
+ | janv. 02 11:37:34 nucleus dhcpd[1225]: | ||
+ | </ | ||
+ | |||
+ | Pour les scripts automatisés, | ||
+ | |||
+ | <code bash> | ||
+ | systemctl is-active isc-dhcp-server.service | ||
+ | active | ||
+ | |||
+ | echo $? | ||
+ | 0 | ||
+ | </ | ||
+ | |||
+ | ===== Gestion du système ===== | ||
+ | |||
+ | Les commandes précédentes sont dédiées à la gestion des services mais ne sont pas adaptées si l'on souhaite connaître l' | ||
+ | |||
+ | ==== Lister les unités ==== | ||
+ | |||
+ | Pour lister les unités actives dont systemd a connaissance, | ||
+ | |||
+ | <code bash> | ||
+ | systemctl list-units | ||
+ | |||
+ | # équivalent: | ||
+ | systemctl | ||
+ | </ | ||
+ | |||
+ | La sortie de la commande comporte plusieurs colonnes: | ||
+ | * UNIT: la désignation de l' | ||
+ | * LOAD: indique si le fichier unité a bien été évalué par systemd. Le fichier unité est gardé en mémoire; | ||
+ | * ACTIVE: résumé de l' | ||
+ | * SUB: état de l' | ||
+ | * DESCRIPTION: | ||
+ | |||
+ | Pour lister l' | ||
+ | <code bash> | ||
+ | # lister toutes les unités | ||
+ | systemctl list-units --all | ||
+ | |||
+ | # filtrer les unités non actives | ||
+ | systemctl list-units --all --state=inactive | ||
+ | </ | ||
+ | |||
+ | Pour diverses raison, certaines unités peuvent passer à l' | ||
+ | |||
+ | Un autre usage fréquent est l' | ||
+ | <code bash> | ||
+ | systemctl list-units --type=service | ||
+ | </ | ||
+ | |||
+ | ==== Lister les fichiers unité ==== | ||
+ | |||
+ | La commande '' | ||
+ | |||
+ | <code bash> | ||
+ | systemctl list-unit-files | ||
+ | </ | ||
+ | |||
+ | Les unités sont des ressources dont à connaissance systemd. Comme systemd n'a pas nécessairement lu toutes les définitions incluses dans les fichiers unités, la vue présente les informations à propos des fichiers eux-même. | ||
+ | |||
+ | '' | ||
+ | |||
+ | <code bash> | ||
+ | # Liste les fichiers unités des services désactivés ou masqués | ||
+ | systemctl list-unit-files | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Gestion des unités ===== | ||
+ | |||
+ | Certaines commandes ont été prévues pour afficher des informations plus précises sur les unités et les fichiers unités. | ||
+ | |||
+ | ==== Afficher un fichier unité ==== | ||
+ | |||
+ | Pour afficher le fichier unité que systemd à chargé, on peut utiliser la commande cat: | ||
+ | |||
+ | <code bash> | ||
+ | systemctl cat isc-dhcp-server.service | ||
+ | </ | ||
+ | |||
+ | La sortie obtenue est une fichier unité connu du processus systemd en cours d’exécution. Cette précision est importante lorsque un fichier unité a été modifié récemment ou si certaines options ont été redéfinies dans un fichier unité fragmenté. | ||
+ | |||
+ | ==== Afficher les dépendances ==== | ||
+ | |||
+ | Pour visualiser l' | ||
+ | |||
+ | <code bash> | ||
+ | systemctl list-dependencies sshd.service | ||
+ | </ | ||
+ | |||
+ | En sortie on obtient les dépendances nécessaires pour le démarrage du service. | ||
+ | |||
+ | On peut également utiliser des dépendances inversées (retrouver les services qui dépendent du service passé en argument) avec l' | ||
+ | |||
+ | <code bash> | ||
+ | systemctl list-dependencies --before sshd.service | ||
+ | </ | ||
+ | |||
+ | ==== Vérifier les propriétés d'une unité ==== | ||
+ | |||
+ | Pour visualiser les propriétés d'une unité on peut utiliser la commande **show**. Sans options la commande liste l' | ||
+ | |||
+ | <code bash> | ||
+ | # Liste l' | ||
+ | systemctl show hostapd.service | ||
+ | |||
+ | # Affiche la valeur de la propriété ExecStart pour l' | ||
+ | systemctl show hostapd.service -p ExecStart | ||
+ | |||
+ | # syntaxe avec option longue | ||
+ | systemctl show hostapd.service --property PIDFile | ||
+ | </ | ||
+ | |||
+ | 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 | ||
+ | </ | ||
+ | ==== Masquer/ | ||
+ | |||
+ | La section gestion des services aborde comment arrêter/ | ||
+ | |||
+ | <code bash> | ||
+ | systemctl mask nginx.service | ||
+ | </ | ||
+ | |||
+ | Ceci permettra de s' | ||
+ | |||
+ | <code bash> | ||
+ | systemctl list-unit-files | ||
+ | |||
+ | . . . | ||
+ | messagebus.service | ||
+ | nginx.service | ||
+ | rescue.service | ||
+ | . . . | ||
+ | </ | ||
+ | |||
+ | Toute tentative de démarrage d'un service masqué retournera un message du type: | ||
+ | < | ||
+ | Failed to start nginx.service: | ||
+ | </ | ||
+ | |||
+ | Pour démasquer un service: | ||
+ | <code bash> | ||
+ | systemctl unmask nginx.service | ||
+ | </ | ||
+ | |||
+ | ===== Modifier un fichier unité ===== | ||
+ | |||
+ | 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 | ||
+ | </ | ||
+ | |||
+ | Cette proposition permet d' | ||
+ | |||
+ | ==== snippet ou fragment/ | ||
+ | |||
+ | Utilisée sans option la commande edit produit un fichier de configuration complémentaire pour l' | ||
+ | |||
+ | <code bash> | ||
+ | systemctl edit nginx.service | ||
+ | </ | ||
+ | |||
+ | 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' | ||
+ | |||
+ | Dans le cas ou l'on souhaite charger l' | ||
+ | |||
+ | <code bash> | ||
+ | systemctl edit --full nginx.service | ||
+ | </ | ||
+ | |||
+ | La commande charge la totalité des valeurs du fichier unité courant dans l' | ||
+ | |||
+ | ==== Identifier les modifications ==== | ||
+ | |||
+ | Pour identifier les modifications apportées sur l' | ||
+ | |||
+ | <code bash> | ||
+ | systemd-delta | ||
+ | </ | ||
+ | |||
+ | ==== Supprimer les altérations ==== | ||
+ | |||
+ | Pour supprimer les ajustements, | ||
+ | |||
+ | <code bash> | ||
+ | # Supprime les extraits de configuration défini pour l' | ||
+ | rm -r / | ||
+ | |||
+ | # Supprime le fichier de configuration défini pour l' | ||
+ | rm / | ||
+ | </ | ||
+ | |||
+ | |||
+ | Après suppression des fichiers de configuration, | ||
+ | <code bash> | ||
+ | systemctl daemon-reload | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Restaurer la configuration système ==== | ||
+ | |||
+ | Pour restaurer la configuration proposée dans les paquets de la distribution: | ||
+ | |||
+ | <code bash> | ||
+ | systemctl revert some.service | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== targets et runlevel ===== | ||
+ | |||
+ | ==== Définition ==== | ||
+ | |||
+ | Les cibles (targets) sont des fichiers unités spéciaux pouvant décrire un état système souhaité ou un point de synchronisation. Comme les autres unités, les fichiers définissant les cibles sont identifiés par leur suffixe en '' | ||
+ | |||
+ | Les cibles peuvent être utilisées pour conduire le système dans un état donné, ce que d' | ||
+ | |||
+ | Pour exemple, il existe une cible '' | ||
+ | |||
+ | Les unités qui ont besoin de mémoire swap pourront spécifier cette condition en utilisant les directives '' | ||
+ | |||
+ | ==== Obtenir ou définir la cible par défaut ==== | ||
+ | |||
+ | |||
+ | Le processus systemd aboutit à une cible par défaut (default target). Pour l' | ||
+ | |||
+ | <code bash> | ||
+ | systemctl get-default | ||
+ | </ | ||
+ | |||
+ | Pour lister les cibles existantes sur le système: | ||
+ | <code bash> | ||
+ | systemctl list-unit-files --type=target | ||
+ | </ | ||
+ | |||
+ | Contrairement aux runlevels, de multiples cibles peuvent être actives en même temps. Une cible active indique que systemd a tenté de démarrer l' | ||
+ | |||
+ | Pour visualser les cibles actives: | ||
+ | |||
+ | <code bash> | ||
+ | systemctl list-units --type=target | ||
+ | </ | ||
+ | |||
+ | Si on souhaite définir une autre cible par défaut, on utilise la commande **set-default** | ||
+ | |||
+ | <code bash> | ||
+ | systemctl set-default multi-user.target | ||
+ | systemctl set-default graphical.target | ||
+ | </ | ||
+ | |||
+ | ===== Isolation d'une cible ===== | ||
+ | |||
+ | Il est possible de démarrer l' | ||
+ | |||
+ | Par exemple si le système opère avec un environnement graphique par défaut via la cible '' | ||
+ | |||
+ | On peut vérifier la liste des dépendances du mode console multi-utilisateur avant de l' | ||
+ | |||
+ | <code bash> | ||
+ | systemctl list-dependencies multi-user.target | ||
+ | </ | ||
+ | |||
+ | Si les services deumerant actifs sont satisfaisants, | ||
+ | |||
+ | <code bash> | ||
+ | systemctl isolate multi-user.target | ||
+ | </ | ||
+ | |||
+ | ===== Utiliser des raccourcis pour les événements importants ===== | ||
+ | |||
+ | Certaines cibles sont définies sur des événements systèmes importants comme la mise sous tension ou le redémarrage. systemctl propose certains raccourcis pour ces événements particuliers. | ||
+ | |||
+ | Pour placer le système en mode restauration (rescue ou single-user): | ||
+ | <code bash> | ||
+ | systemctl rescue | ||
+ | |||
+ | # équivalent de | ||
+ | systemctl isolate rescue.taget | ||
+ | </ | ||
+ | |||
+ | Pour les arrets / redémarrages | ||
+ | <code bash> | ||
+ | systemctl halt | ||
+ | |||
+ | # Arret complet du système | ||
+ | systemctl poweroff | ||
+ | |||
+ | # redémarrage | ||
+ | systemctl reboot | ||
+ | </ | ||
+ | |||
+ | 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' | ||
+ | |||
+ | ===== Analyser la phase de démarrage ===== | ||
+ | |||
+ | systemd intègre un outils d' | ||
+ | <code bash> | ||
+ | systemd-analyse time | ||
+ | </ | ||
+ | |||
+ | Pour détailler le temps de démarrage par unité: | ||
+ | <code bash> | ||
+ | systemd-analyse blame | ||
+ | </ | ||
+ | |||
+ | ===== Pour conclure ===== | ||
+ | |||
+ | Ce wiki a présenté les commandes de bases permettant d' | ||
+ | |||
+ | D' autres composants existent dans l' | ||
Ligne 8: | Ligne 418: | ||
* https:// | * https:// | ||
* https:// | * https:// | ||
+ | * [[https:// |