systemd est le système d’init de la quasi-totalité des distributions Linux modernes. Comprendre ses mécanismes permet de déployer des services fiables, qui redémarrent automatiquement et laissent des traces exploitables.
Créer un service systemd
# /etc/systemd/system/myapp.service
[Unit]
Description=Mon application Python
After=network.target postgresql.service
Requires=postgresql.service
[Service]
Type=simple
User=myapp
Group=myapp
WorkingDirectory=/opt/myapp
EnvironmentFile=/etc/myapp/env
ExecStart=/opt/myapp/venv/bin/python -m uvicorn app:app --host 0.0.0.0 --port 8080
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
# Activer et démarrer
systemctl daemon-reload
systemctl enable --now myapp
systemctl status myapp
Directives de robustesse
[Service]
# Redémarrer sur tout type d'échec
Restart=on-failure
RestartSec=10
# Limiter les ressources
MemoryMax=512M
CPUQuota=50%
# Sécurité : isolation du service
NoNewPrivileges=true
ProtectSystem=strict
PrivateTmp=true
ReadWritePaths=/var/lib/myapp
Timers systemd : remplacer cron
# /etc/systemd/system/backup.timer
[Unit]
Description=Backup quotidien
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true # exécute si la machine était éteinte à l'heure prévue
[Install]
WantedBy=timers.target
systemctl enable --now backup.timer
systemctl list-timers
Les timers sont plus robustes que cron : logs dans journald, gestion des erreurs, possibilité de dépendances.
Lire les logs avec journald
# Logs du service en temps réel
journalctl -u myapp -f
# Logs depuis une heure précise
journalctl -u myapp --since "2026-07-27 14:00" --until "2026-07-27 15:00"
# Derniers 100 messages avec priorité erreur minimum
journalctl -u myapp -n 100 -p err
Notre formation Linux couvre systemd et l’administration système de A à Z.