Si vous utilisez une distribution Linux populaire, notamment Debian, Ubuntu, Arch, openSUSE ou Fedora, votre système utilise systemd comme système d'initialisation.
Bien sûr, il y acontroverses autour de systemd. Mais c’est le système d’initialisation le plus utilisé.
Dans une distribution équipée de systemd, il existe une commande qui pourrait vous faciliter la vie. C'est lesystèmectlcommande, utilisée pour interagir avec le service d'initialisation systemd. Les administrateurs système utilisent toujours cette commande, mais elle est également utile pour les utilisateurs finaux souhaitant prendre le contrôle via le terminal.
Par exemple, vous pouvez utiliser la commande systemctl pourlister les services sous Linux.
Donc, dans ce tutoriel, je vais vous expliquer tous les éléments essentiels dont vous avez besoin pour apprendre à utiliser la commande systemctl :
- La syntaxe de base et les indicateurs communs.
- Exemples pratiques de la commande.
- Pratiquez des questions pour mieux utiliser la commande systemctl.
Voici comment utiliser la commande Systemctl
Pour utiliser la commande systemctl, il est important d'apprendre la syntaxe et les options disponibles.
Voici à quoi ressemble la syntaxe :
systemctl <command> <service_name>
Ici,
<command>
: c'est ici que vous spécifiez l'action que vous souhaitez exécuter sur le service telle questop
,start
, etc.<service_name>
: c'est ici que vous précisez le nom du service avec lequel vous souhaitez travailler.
Pour gérer les services, vous disposez de différentes commandes à utiliser avec la commande systemctl, voici une liste des plus utiles :
Commande | Description |
---|---|
systemctl start [service] |
Démarrez un service et exécutez-le en arrière-plan. |
systemctl stop [service] |
Arrêtez un service en cours d'exécution. |
systemctl enable [service] |
Configurez un service pour qu'il démarre automatiquement au démarrage du système. |
systemctl disable [service] |
Configurez un service pour qu'il ne démarre pas automatiquement au démarrage du système. |
systemctl status [service] |
Afficher l'état actuel (en cours d'exécution, arrêté, etc.) d'un service. |
systemctl restart [service] |
Arrêtez un service en cours d'exécution, puis redémarrez-le. |
systemctl reload [service] |
Recharger la configuration d'un service sans l'arrêter. |
systemctl mask [service] |
Empêcher le démarrage d'un service, même manuellement. |
systemctl unmask [service] |
Autoriser le démarrage d'un service précédemment masqué. |
systemctl set-default [target] |
Modifiez la cible système par défaut (niveau d'exécution) pour le prochain démarrage. |
systemctl list-unit-files |
Répertoriez tous les fichiers d'unité installés et leur état actuel (activé/désactivé). |
systemctl list-dependencies [unit] |
Afficher les dépendances (autres unités) requises pour une unité spécifique. |
systemctl list-sockets |
Répertoriez toutes les sockets actives (pour la communication inter-processus). |
systemctl list-jobs |
Afficher toutes les tâches systemd actuellement actives (opérations en cours). |
systemctl list-units |
Répertoriez toutes les unités systemd chargées et actives (services, sockets, etc.). |
Jetons maintenant un coup d'œil à quelques exemples pratiques de la commande systemctl.
Exemples pratiques de la commande systemctl
Dans cette section, je partage quelques exemples pratiques de la commande systemctl, allant des bases aux plus avancées.
Commençons par comment démarrer votre service.
1. Démarrez un service
Dans la plupart des cas, le service installé est activé par défaut, mais il arrive parfois que vous deviez le faire manuellement.
Pour démarrer un service, vous devez utiliser lestart
flag avec la commande systemctl et ajoutez le nom du service, comme indiqué ici :
sudo systemctl start <service_name>
Disons que je veux démarrer le serveur Apache, j'utiliserai ce qui suit :
sudo systemctl start apache2
2. Activer un service
Lorsque vous démarrez un service, il ne sera efficace que jusqu'au prochain démarrage. Cela signifie que le service sera désactivé lorsque vous redémarrerez votre système.
Pour résoudre cette situation, vous souhaitez qu'un service démarre automatiquement lorsque vous démarrez votre système et à cet effet, vous pouvez utiliser leenable
drapeau comme indiqué ici :
sudo systemctl enable <service_name>
Par exemple, si je souhaite activer le service Apache, j'utiliserai ce qui suit :
sudo systemctl enable apache2
3. Arrêtez un service
Lorsque vous envisagez de modifier un service actif, la première étape à effectuer est d'arrêter le service et pour cela, vous utilisez lestop
drapeau comme indiqué ici :
sudo systemctl stop <service_name>
Par exemple, voici comment arrêter le service Apache :
sudo systemctl stop apache2
4. Désactiver un service
Si vous avez activé un service dans le passé et que vous ne souhaitez plus qu'il soit actif à chaque démarrage du système, vous pouvez le désactiver.
Pour désactiver un service, vous utilisez ledésactiver
drapeau comme indiqué ici :
sudo systemctl disable <service_name>
Pour désactiver le service Apache, j'utilise la commande suivante :
sudo systemctl disable apache2
5. Vérifier l'état d'un service
Vérifier l'état avant d'effectuer toute action sur un service est fortement recommandé et peut vous faire gagner beaucoup de temps.
Pour vérifier l'état d'un service, il suffit d'ajouter le nom du service austatus
drapeau comme indiqué ici :
systemctl status <service_name>
Ici, je vérifie l'état du service Apache :
systemctl status apache2
Comme j'ai désactivé le service Apache plus tôt, le résultat ci-dessus suggère que le service est désactivé.
Mais en fonction de votre service, vous pouvez recevoir un statut de service différent, et voici ce que cela signifie :
Statut | Description |
---|---|
active (running) |
Le service fonctionne actuellement en arrière-plan. |
active (exited) |
Le service était une tâche ponctuelle ou périodique dont l'exécution était terminée. |
active (waiting) |
Le service est en cours d'exécution mais attend qu'un événement ou une condition spécifique se produise avant de continuer. |
inactive |
Le service n'est pas en cours d'exécution actuellement. |
enabled |
Le service est configuré pour démarrer automatiquement au démarrage du système. |
disabled |
Le service est configuré pour ne pas démarrer automatiquement au démarrage du système. |
static |
Ce service ne peut pas être géré par systemd ou la commande systemctl ; il doit être géré manuellement. |
masked |
Le service est masqué, ce qui signifie qu'il ne peut pas être démarré (il doit être démasqué avant de pouvoir s'exécuter). |
alias |
Le nom du service est un alias et le service est un lien symbolique pointant vers un autre fichier unité. |
linked |
Le fichier de service ou d'unité est symboliquement lié à un autre fichier d'unité. |
6. Redémarrez un service
Une fois que vous avez modifié la configuration du service, ou s'il ne répond pas, le redémarrage d'un service peut être utile.
Pour redémarrer un service, vous utilisez lerestart
drapeau comme indiqué ici :
sudo systemctl restart <service_name>
Par exemple, mon serveur Apache ne répondait pas, donc si je devais redémarrer le service, alors j'utilise la commande suivante :
sudo systemctl restart apache2
7. Recharger un service
sudo systemctl unmask <service_name>
Vous rechargez un service lorsque vous apportez des modifications à la configuration du service et que vous souhaitez appliquer les modifications sans redémarrer l'intégralité du service.
sudo systemctl unmask <service_name>
Pour recharger un service, vous utilisez lereload
drapeau comme indiqué ici :
sudo systemctl reload <service_name>
Par exemple, j'ai apporté quelques modifications au service Apache et maintenant si je devais recharger le service Apache, voici ce que je tape dans le terminal :
sudo systemctl reload apache2
8. Masquer un service
Le masquage d'un service est le moyen le plus efficace d'empêcher son démarrage, manuellement ou automatiquement, lors du démarrage du système.
Considérez-le comme une version plus robuste de l'arrêt du service 😉.
Pour masquer un service, vous utilisez lemask
drapeau comme indiqué ici :
sudo systemctl mask <service_name>
Voici à quoi ressemblerait la commande pour le service Apache :
sudo systemctl mask apache2
Chaque fois que vous masquez le service, un lien symbolique est créé qui redirige le fichier de configuration du service vers le périphérique nul (/dev/null
). Cela signifie que vous ne pouvez en aucun cas démarrer le service tant qu’il n’est pas démasqué.
9. Démasquer un service
Si vous souhaitez démarrer le service masqué, il faut d'abord le démasquer !
Pour démasquer un service, vous utilisez leunmask
drapeau comme indiqué ici :
sudo systemctl unmask <service_name>
Tapez simplement la commande comme ceci :
sudo systemctl unmask apache2
Comme vous pouvez le voir, il a supprimé le lien symbolique pointant vers/dev/null
.
10. Définir la cible par défaut
La définition d'une cible par défaut fait référence à la modification du mode de fonctionnement ou du niveau d'exécution par défaut dans lequel le système entrera après le démarrage.
Un bon exemple de définition d'une cible par défaut consiste à choisir l'interface utilisateur à démarrer, par exemple en mode CLI ou en interface graphique.
Pour définir une cible par défaut, vous utilisez leset-default
drapeau comme indiqué ici :
sudo systemctl set-default <target-name>
Par exemple, si vous souhaitez démarrer dans l'interface graphique, je définirai la cible par défaut surgraphical.target
comme indiqué ici :
sudo systemctl set-default graphical.target
Outre la cible GUI, vous disposez également d’autres options :
Cible | Description |
---|---|
multi-user.target |
Cette cible démarre le système avec la mise en réseau activée, adaptée aux serveurs ou aux postes de travail non graphiques. |
rescue.target |
Cette cible est utile pour la récupération du système ou le dépannage lorsque le système ne peut pas démarrer en mode multi-utilisateur normal. |
emergency.target |
Cet objectif fournit un environnement d'urgence pour la maintenance ou la réparation du système lorsque le système est dans un état critique de panne. |
reboot.target |
Ceci est généralement utilisé pour des redémarrages ponctuels ou dans des scripts automatisés. |
poweroff.target |
Ceci est généralement utilisé pour des arrêts ponctuels ou dans des scripts automatisés. |
hibernate.target |
Définit le système pour hiberner (enregistrer l'état du système sur le disque et mettre hors tension) comme cible par défaut. Disponible uniquement si le système prend en charge l'hibernation. |
hybrid-sleep.target |
Définit le système pour qu'il passe en mode veille hybride (une combinaison d'hibernation et de veille) comme cible par défaut. Disponible uniquement si le système prend en charge la veille hybride. |
11. Liste des fichiers d'unité
Les fichiers d'unité sont des fichiers de configuration en texte brut utilisés pour définir et gérer les services et les unités système.
Vous pouvez lister tous les fichiers unité en exécutant la commande suivante :
systemctl list-unit-files
12. Liste de toutes les sockets actives
Lorsque vous répertoriez tous les sockets actifs, vous obtenez un aperçu des canaux de communication inter-processus établis sur un système basé sur systemd.
Pour lister toutes les sockets actives, utilisez la commande donnée :
systemctl list-sockets
Et là vous avez une liste de toutes les sockets qui écoutent les requêtes entrantes.
Questions pratiques 📓
Une fois que vous connaissez les bases de la commande systemctl, il est important de vous entraîner à mieux utiliser la commande.
Voici quelques questions pratiques pour la commande systemctl :
- Comment vérifieriez-vous l'état du
httpd
service utilisantsystèmectl
? - Écrivez la commande pour démarrer le
sshd
service s’il n’est pas déjà en cours d’exécution. - Vous souhaitez activer le
mysqld
service pour démarrer automatiquement au démarrage du système. Quelle commande utiliseriez-vous pour faire cela ? - Supposons que vous ayez besoin de recharger la configuration du
nginx
service sans interrompre son fonctionnement. Quoisystèmectl
commande utiliseriez-vous ? - Votre système est actuellement configuré pour démarrer dans le
multi-user.target
par défaut. Vous souhaitez modifier la cible par défaut engraphical.target
pour le prochain démarrage. Comment utiliseriez-vous pour y parvenir ?
Si vous rencontrez des difficultés à résoudre les questions ci-dessus, vous pouvez poster vos requêtes dansnotre forum communautaireou déposez un commentaire ci-dessous.
Emballer
Maintenant que vous connaissez l’essentiel de la commande systemctl, quelle est la prochaine étape ?
Eh bien, si vous souhaitez explorer et expérimenter, vous pouvez créer votre propre service systemd. Voici commentécrivez votre propre service systemd sous Linux :