Gérer ses services avec systemd
Sur Debian 13, systemd démarre les services, les surveille et centralise leurs journaux. Savoir le piloter évite de redémarrer tout le VPS pour relancer Nginx ou une application. Ces commandes sont celles de systemd sur Debian 13.
Les commandes de base
| Action | Commande |
|---|---|
| État détaillé | systemctl status nginx |
| Démarrer maintenant | sudo systemctl start nginx |
| Arrêter maintenant | sudo systemctl stop nginx |
| Redémarrer | sudo systemctl restart nginx |
| Recharger la configuration | sudo systemctl reload nginx |
| Activer au démarrage | sudo systemctl enable nginx |
| Désactiver au démarrage | sudo systemctl disable nginx |
| Voir les échecs | systemctl --failed |
start agit immédiatement, enable crée le lien qui lance le service au boot. Les deux sont indépendants : un service peut tourner sans être activé, et inversement. reload est préférable à restart quand le logiciel relit sa configuration sans couper les connexions ; nginx -t doit toujours précéder un rechargement.
Pour lister ce qui tourne réellement :
systemctl list-units --type=service --state=running
systemctl is-enabled nginxCréer une unité pour son application
Une application lancée à la main s'arrête à la fermeture du terminal. Une unité la fait démarrer au boot et la redémarre en cas de plantage. Créez /etc/systemd/system/mon-app.service :
[Unit]
Description=Mon application Node.js
After=network.target
[Service]
Type=simple
User=app
WorkingDirectory=/srv/mon-app
EnvironmentFile=/etc/mon-app.env
ExecStart=/usr/bin/node /srv/mon-app/index.js
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
[Install]
WantedBy=multi-user.targetExecStart exige un chemin absolu et ne passe pas par un shell. EnvironmentFile doit être lisible par l'utilisateur du service, avec des permissions 600 s'il contient des secrets. Restart=on-failure évite de relancer en boucle un service qui sort proprement.
Activez ensuite :
sudo systemctl daemon-reload
sudo systemctl enable --now mon-app
sudo systemctl status mon-appdaemon-reload est obligatoire après toute modification d'une unité.
Lire l'état et les journaux
systemctl status mon-app --no-pager
journalctl -u mon-app -f
journalctl -u mon-app --since "30 min ago" -p errstatus affiche le code de sortie, le PID principal et les dernières lignes. Un état activating (auto-restart) signale une boucle de redémarrage : lisez les lignes juste avant le message d'échec. Après correction, sudo systemctl reset-failed mon-app efface le compteur d'échecs.
Bonnes pratiques
- Ne modifiez pas les unités fournies par les paquets. Utilisez
sudo systemctl edit nginxpour créer un fichier de surcharge dans/etc/systemd/system/nginx.service.d/. - Utilisez
systemctl maskplutôt quedisablepour empêcher un service de démarrer, même comme dépendance. - Après un changement, testez un redémarrage complet du VPS et vérifiez
systemctl --failed.
Vérifier
systemctl is-active mon-app
systemctl is-enabled mon-app
systemctl show -p MainPID -p Restart mon-appis-active doit répondre active, is-enabled doit répondre enabled, et le PID doit changer après un restart. Si le service redémarre sans cesse, cherchez l'erreur dans journalctl -u mon-app -n 100 avant de modifier l'unité.
Publicité
Cet article vous a-t-il aidé ?
À lire aussi
- Changer le port SSH sans se verrouillerDéplacer SSH vers un autre port en ouvrant le pare-feu d'abord et en testant depuis une seconde session.
- Planifier des tâches avec cronÉcrire une crontab fiable, journaliser la sortie et choisir entre cron et timer systemd.
- Protéger SSH avec Fail2banInstaller Fail2ban sur Debian 13, régler la prison sshd et éviter de vous bannir vous-même.