Démarrer, arrêter et créer un service
systemctl au quotidien, la différence entre start et enable, et comment transformer son programme en service qui repart tout seul.
Sur toutes les distributions modernes, systemd décide de ce qui tourne. Cinq commandes couvrent la quasi-totalité des besoins.
sudo systemctl status nginx # comment il va, et ses dernières lignes de journal
sudo systemctl start nginx # le démarrer maintenant
sudo systemctl stop nginx # l'arrêter maintenant
sudo systemctl restart nginx # l'arrêter puis le redémarrer
sudo systemctl reload nginx # relire la configuration sans couper les connexionsreload plutôt que restart
reload demande au service de relire sa configuration sans s'arrêter : les visiteurs en cours ne voient rien. Tous les services ne le savent pas faire, mais nginx, postgresql et sshd oui. Prenez l'habitude d'essayer reload d'abord.
start n'est pas enable
C'est la confusion la plus fréquente, et elle se paie au premier redémarrage. start lance le service maintenant. enable lui dit de se lancer aussi aux prochains démarrages de la machine. Les deux sont indépendants : un service démarré mais non activé disparaît au reboot.
sudo systemctl enable --now mon-service # activer ET démarrer, en une fois
sudo systemctl is-enabled mon-service # vérifier
sudo systemctl disable mon-service # ne plus démarrer au bootFaire de son programme un service
Un programme lancé dans un terminal meurt quand la session SSH se ferme. Un service systemd, lui, démarre au boot, repart s'il plante, et ses messages atterrissent dans le journal.
/etc/systemd/system/mon-appli.service
[Unit]
Description=Mon application
After=network.target
[Service]
Type=simple
User=appli
WorkingDirectory=/opt/mon-appli
ExecStart=/usr/bin/node /opt/mon-appli/index.js
Restart=always
RestartSec=5
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now mon-appli
sudo systemctl status mon-applidaemon-reload, sinon rien ne change
systemd garde les définitions en mémoire. Après avoir créé ou modifié un fichier .service, daemon-reload est obligatoire — sans lui, systemd continue d'appliquer l'ancienne version, et vous cherchez pendant vingt minutes pourquoi votre correction n'a aucun effet.
Quelques réglages qui servent
| Directive | Ce qu'elle fait |
|---|---|
| Restart=always | Repart quoi qu'il arrive, même après un arr êt propre |
| Restart=on-failure | Repart seulement en cas d'erreur — souvent le bon choix |
| RestartSec=5 | Attend cinq secondes avant de retenter, pour ne pas s'emballer |
| User= | Fait tourner le service sous un compte sans privilèges |
| EnvironmentFile= | Charge les variables depuis un fichier, secrets compris |
| After= | Attend qu'un autre service soit prêt (réseau, base de données) |
Voir ce qui tourne, et ce qui a échoué
systemctl list-units --type=service --state=running
systemctl --failed # les services en erreur
systemd-analyze blame # ce qui ralentit le démarrageBloqué malgré tout ? Ouvrez un ticket : on répond en français, et on regarde votre machine si besoin.
Ouvrir un ticket