Démarrer, arrêter et redémarrer un service avec systemctl
Dans cette étape, vous apprendrez à gérer le cycle de vie des services système à l'aide des commandes systemctl. Vous pratiquerez le démarrage, l'arrêt et le redémarrage d'un service. Pour cet exercice, nous allons créer un service factice. Cette approche garantit que nous pouvons manipuler un service en toute sécurité sans affecter les fonctions critiques du système.
Tout d'abord, créons un fichier d'unité de service simple. Ce fichier définira un service qui écrit simplement un horodatage dans un fichier journal toutes les quelques secondes.
Créez un nouveau fichier d'unité de service nommé mytest.service directement dans le répertoire système de systemd à l'aide de nano :
sudo nano /etc/systemd/system/mytest.service
Collez le contenu suivant dans l'éditeur nano :
[Unit]
Description=My Test Service
After=network.target
[Service]
Type=simple
ExecStart=/bin/bash -c 'while true; do echo "$(date): My Test Service is running." >> /tmp/mytest.log; sleep 5; done'
ExecStop=/bin/bash -c 'echo "$(date): My Test Service stopped." >> /tmp/mytest.log'
Restart=on-failure
[Install]
WantedBy=multi-user.target
[Unit] : Contient des informations génériques sur l'unité. Description fournit un nom lisible par l'homme, et After=network.target spécifie que ce service doit démarrer après que le réseau soit opérationnel.
[Service] : Définit le comportement du service.
Type=simple : Indique un type de service simple où la commande ExecStart est le processus principal.
ExecStart : La commande à exécuter lorsque le service démarre. Ici, il s'agit d'une boucle bash qui écrit un message horodaté dans /tmp/mytest.log toutes les 5 secondes.
ExecStop : La commande à exécuter lorsque le service s'arrête. Elle écrit un message d'arrêt dans le journal.
Restart=on-failure : Configure le service pour qu'il redémarre s'il se termine avec un statut non nul.
[Install] : Contient des informations sur la manière dont le service doit être installé. WantedBy=multi-user.target signifie que ce service doit être démarré lorsque le système atteint le niveau d'exécution multi-utilisateur.
Enregistrez le fichier en appuyant sur Ctrl+X, puis Y pour confirmer, et Entrée pour enregistrer le fichier.
Maintenant, rechargez le démon systemd pour qu'il reconnaisse le nouveau fichier de service :
sudo systemctl daemon-reload
Démarrer un service
Pour démarrer un service, utilisez la commande systemctl start.
Exécutez la commande suivante pour démarrer mytest.service. Notez que nous devons utiliser sudo car les opérations systemctl nécessitent généralement des privilèges root.
sudo systemctl start mytest.service
Il n'y aura pas de sortie immédiate si la commande réussit.
Vérifiez maintenant que le service est en cours d'exécution en consultant son état :
systemctl status mytest.service
Vous devriez voir une sortie indiquant que le service est active (running) :
● mytest.service - My Test Service
Loaded: loaded (/etc/systemd/system/mytest.service; disabled; preset: disabled)
Active: active (running) since ...
Main PID: ... (bash)
Tasks: 2 (limit: ...)
Memory: ...
CPU: ...
CGroup: /system.slice/mytest.service
├─... /bin/bash -c "while true; do echo \"\$(date): My Test Service is running.\" >> /tmp/mytest.log; sleep 5; done"
└─... sleep 5
...sortie omise...
Vous pouvez également vérifier le fichier journal pour voir si le service écrit des messages :
tail -f /tmp/mytest.log
Vous devriez voir apparaître de nouvelles lignes toutes les 5 secondes, similaires à ceci :
Tue Jul 22 09:15:09 AM CST 2025: My Test Service is running.
Tue Jul 22 09:15:14 AM CST 2025: My Test Service is running.
Appuyez sur Ctrl+C pour quitter tail.
Arrêter un service
Pour arrêter un service en cours d'exécution, utilisez la commande systemctl stop.
Exécutez la commande suivante pour arrêter mytest.service :
sudo systemctl stop mytest.service
Encore une fois, il n'y aura pas de sortie immédiate.
Vérifiez que le service s'est arrêté :
systemctl status mytest.service
La sortie devrait maintenant afficher Active: inactive (dead) :
○ mytest.service - My Test Service
Loaded: loaded (/etc/systemd/system/mytest.service; disabled; preset: disabled)
Active: inactive (dead) since ...
...sortie omise...
Vérifiez à nouveau le fichier journal /tmp/mytest.log. Vous devriez voir le message "My Test Service stopped." et aucune nouvelle ligne "running" apparaître.
tail /tmp/mytest.log
La sortie ressemblera à ceci :
Tue Jul 22 09:15:24 AM CST 2025: My Test Service is running.
Tue Jul 22 09:15:28 AM CST 2025: My Test Service stopped.
Redémarrer un service
Pour redémarrer un service, utilisez la commande systemctl restart. Cette commande arrête d'abord le service, puis le démarre à nouveau. C'est utile lorsque vous avez apporté des modifications à la configuration d'un service et que vous souhaitez qu'elles prennent effet.
Exécutez la commande suivante pour redémarrer mytest.service :
sudo systemctl restart mytest.service
Vérifiez que le service est à nouveau en cours d'exécution :
systemctl status mytest.service
Vous devriez à nouveau voir Active: active (running), et le Main PID sera probablement un nouveau numéro, indiquant qu'un nouveau processus a démarré.
● mytest.service - My Test Service
Loaded: loaded (/etc/systemd/system/mytest.service; disabled; preset: disabled)
Active: active (running) since ...
Main PID: ... (bash)
Tasks: 2 (limit: ...)
Memory: ...
CPU: ...
CGroup: /system.slice/mytest.service
├─... /bin/bash -c "while true; do echo \"\$(date): My Test Service is running.\" >> /tmp/mytest.log; sleep 5; done"
└─... sleep 5
...sortie omise...
Vérifiez le fichier journal /tmp/mytest.log pour confirmer que le service a repris l'écriture des messages "running".
tail -f /tmp/mytest.log
Vous devriez voir un message "stopped" suivi de nouveaux messages "running" :
Tue Jul 22 09:15:28 AM CST 2025: My Test Service stopped.
Tue Jul 22 09:15:40 AM CST 2025: My Test Service is running.
Appuyez sur Ctrl+C pour quitter tail.