Lancer une app avec & ou nohup va bien jusqu'à ce que le serveur redémarre, que le processus plante ou que vous vouliez trouver ses journaux — là, tout s'effondre. systemd est la réponse standard : il démarre votre app au boot, la redémarre si elle meurt et capture ses journaux. Transformer un script ou un binaire en service géré tient en un petit fichier.
1. Écrivez un fichier unit
Créez /etc/systemd/system/myapp.service :
[Unit]
Description=My application
After=network.target
[Service]
User=myapp
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/python3 /opt/myapp/run.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Ajustez ExecStart, WorkingDirectory et User à votre app. Restart=always est ce qui la garde en vie.
2. Créez un utilisateur dédié (recommandé)
sudo useradd --system --no-create-home --shell /usr/sbin/nologin myapp
sudo chown -R myapp:myapp /opt/myapp
Tourner en utilisateur non-root limite les dégâts si l'app est un jour compromise.
3. Activez-le et démarrez-le
sudo systemctl daemon-reload
sudo systemctl enable --now myapp
enable le fait démarrer au boot ; --now le démarre immédiatement.
4. Vérifiez l'état et les journaux
sudo systemctl status myapp
journalctl -u myapp -f # suivre les journaux en direct
Commandes du quotidien
sudo systemctl restart myapp # redémarrer après un changement
sudo systemctl stop myapp # l'arrêter
sudo systemctl disable myapp # ne plus démarrer au boot
Mises en garde honnêtes
- Lancez
daemon-reloadaprès avoir modifié un fichier unit, sinon systemd utilise l'ancienne version. - Attention aux boucles de plantage. Si l'app échoue instantanément,
Restart=alwaysréessaie indéfiniment —RestartSec=5espace les tentatives ; corrigez l'erreur de fond via les journaux. - Préférez un
User=non-root pour qu'une app compromise ne possède pas tout le serveur.
Étapes suivantes
Un service systemd, c'est ainsi que vous gardez n'importe quoi en marche 24/7 — par exemple un agent IA qui tourne en continu ou le relais derrière un serveur RustDesk auto-hébergé. Si votre app est plutôt conteneurisée, le --restart unless-stopped de Docker joue le même rôle — voir comment installer Docker.
Commentaires
Pas encore de commentaires. Soyez le premier.