Service Management dans Systemd
Couvre les workflows systemctl de démarrage, d'activation, de surveillance et de personnalisation des services systemd.
Les services d'un système Oracle Linux sont gérés par la commande systemctl subcommand.
Les sous-commandes enable, disable, stop, start, restart, reload et status sont des exemples.
Pour plus d'informations, consultez la page de manuel systemctl(1).
Démarrage et arrêt des services
Affiche les commandes de base systemctl start et systemctl stop et explique comment les changements d'état persistent.
Pour démarrer un service, utilisez la commande systemctl start :
sudo systemctl start sshd
Pour arrêter un service, utilisez la commande systemctl stop :
sudo systemctl stop sshd
La modification de l'état d'un service ne dure que lorsque le système conserve le même état.
Si vous arrêtez un service, puis que vous remplacez la cible d'état du système par une cible dans laquelle le service est configuré pour s'exécuter (par exemple, en réinitialisant le système), le service redémarre. De même, le démarrage d'un service ne permet pas au service de démarrer après un redémarrage. Reportez-vous à Activation et désactivation des services.
Activation et désactivation des services
Explique comment activer, désactiver, masquer et démasquer les services afin qu'ils démarrent (ou restent arrêtés) après les réinitialisations.
Vous pouvez utiliser la commande systemctl pour activer ou désactiver le démarrage d'un service lors de l'initialisation du système, par exemple :
sudo systemctl enable httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
La commande enable active un service en créant un lien symbolique pour la cible d'état système de niveau le plus bas sur laquelle le service démarre. Dans l'exemple précédent, la commande crée le lien symbolique httpd.service pour la cible multi-user.
Pour démarrer le service en même temps que vous l'activez, ajoutez l'option --now à la commande. Par exemple :
sudo systemctl enable --now httpdLa désactivation d'un service supprime le lien symbolique :
sudo systemctl disable httpd
Removed /etc/systemd/system/multi-user.target.wants/httpd.service.
Pour vérifier si un service est activé, utilisez la sous-commande is-enabled comme indiqué dans les exemples suivants :
systemctl is-enabled httpd
disabled
systemctl is-enabled sshd
enabled
Après l'exécution de la commande systemctl disable, le service peut toujours être démarré ou arrêté par des comptes utilisateur, des scripts et d'autres processus.
Toutefois, si vous devez vous assurer que le service ne peut pas être démarré par inadvertance, par exemple par un service en conflit, utilisez la commande systemctl mask comme suit :
sudo systemctl mask httpd
Created symlink from '/etc/systemd/system/multi-user.target.wants/httpd.service' to '/dev/null'
La commande mask définit la référence de service sur /dev/null. Si vous essayez de démarrer un service qui a été masqué, vous recevrez une erreur comme indiqué dans l'exemple suivant :
sudo systemctl start httpd
Failed to start httpd.service: Unit is masked.
Pour rétablir le lien entre la référence de service et le fichier de configuration de l'unité de service correspondante, utilisez la commande systemctl unmask :
sudo systemctl unmask httpd
Pour plus d'informations, consultez la page de manuel systemctl(1).
Affichage de l'état des services
Détails des commandes systemctl is-active et status pour la vérification de l'état du service et des groupes de contrôle.
Pour vérifier si un service est en cours d'exécution, utilisez la sous-commande is-active. La sortie est active ou inactive, comme indiqué dans les exemples suivants :
systemctl is-active httpd
active
systemctl is-active sshd
inactive
La sous-commande status fournit un récapitulatif détaillé de l'état d'un service, y compris une arborescence qui affiche les tâches du groupe de contrôle (CGroup) implémentées par le service :
systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since ...
Docs: man:httpd.service(8)
Main PID: 11832 (httpd)
Status: "Started, listening on: port 80"
Tasks: 213 (limit: 26213)
Memory: 32.5M
CGroup: /system.slice/httpd.service
├─11832 /usr/sbin/httpd -DFOREGROUND
├─11833 /usr/sbin/httpd -DFOREGROUND
├─11834 /usr/sbin/httpd -DFOREGROUND
├─11835 /usr/sbin/httpd -DFOREGROUND
└─11836 /usr/sbin/httpd -DFOREGROUND
Jul 17 00:14:32 Unknown systemd[1]: Starting The Apache HTTP Server...
Jul 17 00:14:32 Unknown httpd[11832]: Server configured, listening on: port 80
Jul 17 00:14:32 Unknown systemd[1]: Started The Apache HTTP Server.
Un élément cgroup est un ensemble de processus liés entre eux afin que vous puissiez contrôler leur accès aux ressources système. Dans cet exemple, cgroup pour le service httpd est httpd.service, qui se trouve dans la tranche system.
Les tranches divisent le fichier cgroups d'un système en différentes catégories. Pour afficher la tranche et la hiérarchie cgroup, utilisez la commande systemd-cgls :
systemd-cgls
Control group /:
-.slice
├─user.slice
│ └─user-1000.slice
│ ├─user@1000.service
│ │ └─init.scope
│ │ ├─6488 /usr/lib/systemd/systemd --user
│ │ └─6492 (sd-pam)
│ └─session-7.scope
│ ├─6484 sshd: root [priv]
│ ├─6498 sshd: root@pts/0
│ ├─6499 -bash
│ ├─6524 sudo systemd-cgls
│ ├─6526 systemd-cgls
│ └─6527 less
├─init.scope
│ └─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 16
└─system.slice
├─rngd.service
│ └─1266 /sbin/rngd -f --fill-watermark=0
├─irqbalance.service
│ └─1247 /usr/sbin/irqbalance --foreground
├─libstoragemgmt.service
│ └─1201 /usr/bin/lsmd -d
├─systemd-udevd.service
│ └─1060 /usr/lib/systemd/systemd-udevd
├─polkit.service
│ └─1241 /usr/lib/polkit-1/polkitd --no-debug
├─chronyd.service
│ └─1249 /usr/sbin/chronyd
├─auditd.service
│ ├─1152 /sbin/auditd
│ └─1154 /usr/sbin/sedispatch
├─tuned.service
│ └─1382 /usr/libexec/platform-python -Es /usr/sbin/tuned -l -P
├─systemd-journald.service
│ └─1027 /usr/lib/systemd/systemd-journald
├─atd.service
│ └─1812 /usr/sbin/atd -f
├─sshd.service
│ └─1781 /usr/sbin/sshd
system.slice contient des services et d'autres processus système. user.slice contient des processus utilisateur, qui s'exécutent dans des groupes cgroups transitoires appelés portées.
Dans cet exemple, les processus de l'utilisateur portant l'ID 1000 sont exécutés dans la portée session-7.scope sous la tranche /user.slice/user-1000.slice.
Vous pouvez utiliser la commande systemctl pour limiter la CPU, les E/S, la mémoire et les autres ressources disponibles pour les processus dans les groupes de services et d'étendue. Reportez-vous à Contrôle de l'accès aux ressources système.
Pour plus d'informations, reportez-vous aux pages de manuel systemctl(1) et systemd-cgls(1). Reportez-vous également à Utilisation de Systemd pour gérer les groupes de contrôle.
Contrôle de l'accès aux ressources système
Indique comment utiliser systemctl set-property et systemd-run pour affecter des limites de CPU et de mémoire aux services et aux étendues.
Utilisez la commande systemctl pour contrôler l'accès d'un cgroup aux ressources système, par exemple :
sudo systemctl [--runtime] set-property httpd CPUShares=512 MemoryLimit=1G
CPUShare contrôle l'accès aux ressources de CPU. La valeur par défaut étant 1024, une valeur de 512 réduit de moitié l'accès au temps CPU dont disposent les processus dans cgroup. De même, MemoryLimit contrôle la quantité maximale de mémoire que cgroup peut utiliser.
Vous n'avez pas besoin d'indiquer l'extension .service au nom d'un service.
Si vous spécifiez l'option --runtime, le paramètre ne persiste pas après la réinitialisation du système.
Vous pouvez également modifier les paramètres de ressource d'un service sous l'en-tête [Service] dans le fichier de configuration du service dans /usr/lib/systemd/system. Après avoir modifié le fichier, chargez de nouveau systemd ses fichiers de configuration, puis redémarrez le service :
sudo systemctl daemon-reload
sudo systemctl restart service
Vous pouvez exécuter des commandes générales dans les étendues et utiliser systemctl pour contrôler l'accès que ces cgroups transitoires ont aux ressources système. Pour exécuter une commande dans une étendue, utilisez la commande systemd-run :
sudo systemd-run --scope --unit=group_name.scope [--slice=slice_name]
Si vous ne voulez pas créer le groupe sous la tranche system par défaut, vous pouvez indiquer une autre tranche ou le nom d'une nouvelle tranche. L'exemple suivant exécute une commande nommée mymonitor dans mymon.scope sous myslice.slice :
sudo systemd-run --scope --unit=mymon.scope --slice=myslice mymonitor
Running as unit mymon.scope.
Si vous n'indiquez pas l'option --scope, le groupe de contrôle est créé en tant que service plutôt qu'en tant que portée.
Vous pouvez ensuite utiliser systemctl pour contrôler l'accès dont dispose une étendue aux ressources système de la même manière que pour un service. Cependant, contrairement à un service, vous devez indiquer l'extension .scope, par exemple :
sudo systemctl --runtime set-property mymon.scope CPUShares=256
Pour plus d'informations, reportez-vous à Utilisation de Systemd pour gérer les groupes de contrôle et aux pages de manuel systemctl(1), systemd-cgls(1) et systemd.resource-control(5).
Créer un service systemd basé sur l'utilisateur
Outre les fichiers systemd à l'échelle du système, systemd vous permet de créer des services basés sur l'utilisateur que vous pouvez exécuter à partir d'un niveau utilisateur sans nécessiter d'accès root et de privilèges. Ces services basés sur l'utilisateur sont sous le contrôle de l'utilisateur et sont configurables indépendamment des services système.
Voici quelques caractéristiques distinctives des services systemd basés sur l'utilisateur :
- Les services
systemdbasés sur l'utilisateur sont liés à un compte utilisateur spécifique. - Elles sont créées dans le répertoire de base de l'utilisateur associé dans
$HOME/.config/systemd/user/. - Une fois ces services activés, ils démarrent lorsque l'utilisateur associé se connecte. Ce comportement diffère de celui des services
systemdactivés qui démarrent au démarrage du système.
Cette fonctionnalité est particulièrement utile lors de la création de services de conteneur Podman. Pour plus d'informations sur Podman, reportez-vous au Guide de l'utilisateur Oracle Linux : Podman.
Pour créer un service basé sur un utilisateur, procédez comme suit :
Modification des fichiers d'unité de service systemd
Explique comment remplacer les fichiers d'unités packagées et créer des fragments de code déposés sous /etc/systemd/system.
Pour modifier la configuration des services systemd, copiez les fichiers avec les extensions .service, .target, .mount et .socket de /usr/lib/systemd/system vers /etc/systemd/system.
Après avoir copié les fichiers, vous pouvez modifier les versions dans /etc/systemd/system.
Les fichiers dans /etc/systemd/system sont prioritaires sur les versions dans /usr/lib/systemd/system. Les fichiers dans /etc/systemd/system ne sont pas écrasés lorsque vous mettez à jour un package qui touche des fichiers dans /usr/lib/systemd/system.
Pour rétablir la configuration systemd par défaut pour un service particulier, vous pouvez renommer ou supprimer les copies dans /etc/systemd/system.
Une autre approche pour modifier la configuration d'un service consiste à créer un fichier de dépôt. Avec cette approche, vous pouvez conserver l'unité d'origine tout en modifiant des paramètres spécifiques de l'unité.
Créez des fichiers de dépôt dans /etc/systemd/system/unit_name.d/, où le répertoire unit_name.d est une unité existante, puis donnez-leur une extension de fichier .conf.
Par exemple : /etc/systemd/system/unit_name.d/name_of_drop-in.conf. systemd lit le fichier .conf et applique les paramètres à l'unité d'origine.
Les sections suivantes décrivent les différentes parties d'un fichier d'unité de service que vous pouvez modifier et personnaliser pour un système.
A propos des fichiers d'unité de service
Les services sont exécutés en fonction des fichiers d'unité de service correspondants. Un fichier d'unité de service contient généralement les sections suivantes, chaque section ayant ses options définies respectives qui déterminent le mode d'exécution d'un service spécifique :
-
[Unit] -
Contient des informations sur le service.
[UnitType]:-
Contient des options spécifiques au type d'unité du fichier. Par exemple, dans un fichier d'unité de service, cette section est intitulée
[Service]et contient des options spécifiques aux unités du type de service, telles queExecStartouStandardOutput.Seuls les types d'unités qui offrent des options spécifiques à leur type ont une telle section.
-
[Install] -
Contient des informations d'installation pour l'unité spécifique. Les informations de cette section sont utilisées par les commandes systemctl enable et systemctl disable.
Un fichier d'unité de service peut contenir les configurations suivantes pour un service.
[Unit]
Description=A test service used to develop a service unit file template
[Service]
Type=simple
StandardOutput=journal
ExecStart=/usr/lib/systemd/helloworld.sh
[Install]
WantedBy=default.target
Options configurables dans les fichiers d'unité de service décrit certaines options configurées couramment utilisées disponibles sous chaque section. Une liste complète est également disponible dans les pages de manuel systemd.service(5) et systemd.unit(5).
Options configurables dans les fichiers d'unité de service
Chacune des listes suivantes traite d'une section distincte du fichier d'unité de service.
Description des options sous la section [Unité]
La liste suivante fournit un aperçu général des options configurables couramment utilisées disponibles dans la section [Unit] du fichier d'unité de service :
-
Description -
Fournit des informations sur le service. Les informations sont affichées lorsque vous exécutez la commande
systemctl statussur l'unité. -
Documentation -
Contient une liste d'URI séparés par des espaces faisant référence à la documentation pour cette unité ou sa configuration.
-
After -
Configure l'unité pour qu'elle s'exécute uniquement après le démarrage des unités répertoriées dans l'option.
Dans l'exemple suivant, si le fichier var3.
servicecontient l'entrée suivante, il n'est démarré qu'après le démarrage des unitésvar1.serviceetvar2.service:After=var1.service var2.service -
Requires -
Configure une unité pour qu'elle ait des dépendances de besoins sur d'autres unités. Si une unité est activée, les unités répertoriées dans son option
Requiressont également activées. -
Wants -
Version moins stricte de l'option
Requires. Par exemple, une unité spécifique peut être activée même si l'une des unités répertoriées dans son optionWantsne démarre pas.
Description des options sous la section [Service]
La liste suivante donne un aperçu général des options configurables couramment utilisées disponibles dans la section [Service] d'un fichier d'unité de service.
-
Type -
Configure le type de démarrage du processus pour l'unité de service.
Par défaut, la valeur de ce paramètre est
simple, ce qui indique que le processus principal du service est celui qui est démarré par le paramètreExecStart.En général, si le type d'un service est
simple, la définition peut être omise dans le fichier. -
StandardOutput -
Configure la manière dont les événements du service sont journalisés. Par exemple, supposons qu'un fichier d'unité de service comporte l'entrée suivante :
StandardOutput=journalDans l'exemple, la valeur
journalindique que les événements sont enregistrés dans le journal, qui peut être affiché à l'aide de la commandejournalctl. -
ExecStart -
Spécifie le chemin complet et la commande qui démarre le service, par exemple,
/usr/bin/npm start. -
ExecStop -
Spécifie les commandes à exécuter pour arrêter le service démarré via
ExecStart. -
ExecReload -
Spécifie les commandes à exécuter pour déclencher un rechargement de configuration dans le service.
-
Restart -
Configure si le service doit être redémarré lorsque le processus de service se ferme, est arrêté ou lorsqu'un délai d'expiration est atteint.
Remarque
Cette option ne s'applique pas lorsque le processus est arrêté correctement par une opérationsystemd, par exemplesystemctl stopousystemctl restart. Dans ce cas, le service n'est pas redémarré par cette option de configuration. -
RemainAfterExit -
Valeur booléenne qui configure si le service doit être considéré comme actif même lorsque tous ses processus ont pris fin. La valeur par défaut est
no.
Description des options sous la section [Installer]
La liste suivante donne un aperçu général des options configurables couramment utilisées disponibles dans la section [Install] du fichier d'unité de service.
-
Alias -
Liste de noms d'unité séparés par des espaces.
Au moment de l'installation,
systemctl enablecrée des liens symboliques de ces noms vers le nom de fichier de l'unité.Les alias ne sont effectifs que lorsque l'unité est activée.
-
RequiredBy -
Configure le service qui doit être requis par d'autres unités.
Par exemple, considérons un fichier d'unité
var1.serviceauquel la configuration suivante est ajoutée :RequiredBy=var2.service var3.serviceLorsque
var1.serviceest activé, une dépendanceRequiresest accordée àvar2.serviceetvar3.servicesurvar1.service. Cette dépendance est définie par un lien symbolique créé dans le dossier.requiresde chaque service dépendant (var2.serviceetvar3.service) qui pointe vers le fichier d'unité systèmevar1.service. -
WantedBy -
Spécifie la liste des unités auxquelles une dépendance
wantsdoit être accordée au service dont vous modifiez le fichier.Par exemple, considérons un fichier d'unité
var1.serviceauquel la configuration suivante est ajoutée :WantedBy=var2.service var3.serviceLorsque
var1.serviceest activé, une dépendanceWantsest accordée àvar2.serviceet àvar3.servicesurvar1.service. Cette dépendance est définie par un lien symbolique créé dans le dossier ".wants" de chaque service dépendant (var2.serviceetvar3.service) qui pointe vers le fichier d'unité système pourvar1.service. -
Also -
Répertorie les unités supplémentaires à installer ou à supprimer lorsque l'unité est installée ou supprimée.
-
DefaultInstance -
L'option
DefaultInstances'applique uniquement aux fichiers d'unités de modèle.Les fichiers d'unités de modèle permettent de créer plusieurs unités à partir d'un seul fichier de configuration. L'option
DefaultInstanceindique l'instance pour laquelle l'unité est activée si le modèle est activé sans instance définie explicitement.
Créer un fichier de dépôt d'unité
Vous pouvez utiliser la commande systemctl edit pour générer automatiquement un fichier d'unité ou un fichier d'unité systemd pour toute unité systemd existante. Vous pouvez utiliser le fichier de dépôt pour remplacer la configuration de base d'une unité ou pour étendre les conditions requises pour un fichier d'unité.