LinuxSystèmeDevOps

systemd : créer et gérer ses services Linux comme un pro

27 juillet 2026 · Sphinx-Digital

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.