⚙️ Systemd
systemctl, journald, units, timers, targets
Aide-mémoire
Systemd — Aide-mémoire
systemctl — Gestion des services
# État
systemctl status nginx # État détaillé
systemctl status 'nginx*' # Pattern glob
systemctl is-active nginx # active / inactive (code retour 0/1)
systemctl is-enabled nginx # enabled / disabled
systemctl is-failed nginx # failed (code retour 0/1)
Démarrer / Arrêter
systemctl start nginx
systemctl stop nginx
systemctl restart nginx # Stop + Start
systemctl reload nginx # Recharge la config sans redémarrer
systemctl reload-or-restart nginx # Reload si possible, sinon restart
Activer au démarrage
systemctl enable nginx # Activer
systemctl enable --now nginx # Activer + démarrer immédiatement
systemctl disable nginx # Désactiver
systemctl disable --now nginx # Désactiver + arrêter
systemctl mask nginx # Empêcher tout démarrage (même manuel)
systemctl unmask nginx
Recharger la config systemd
systemctl daemon-reload # Après modification d'un unit file
systemctl reset-failed # Remettre à zéro les unités en échec
Lister les unités
systemctl list-units # Unités actives
systemctl list-units --all # Toutes (actives + inactives)
systemctl list-units --state=failed # Uniquement en échec
systemctl list-units --type=service # Filtrer par type
systemctl list-unit-files # Fichiers d'unités (enabled/disabled)
systemctl list-unit-files --type=timer # Tous les timers
systemctl list-timers --all # Timers + prochaine exécution
systemctl list-dependencies nginx # Dépendances d'un service
Fichiers d'unité — Emplacement
/lib/systemd/system/ # Units du système (paquets)
/usr/lib/systemd/system/ # Units du système (alternatif)
/etc/systemd/system/ # Overrides locaux (prioritaire)
~/.config/systemd/user/ # Units utilisateur (--user)
Structure d'un fichier .service
[Unit]
Description=Mon Application Web
Documentation=https://exemple.com/docs
After=network-online.target postgresql.service
Wants=network-online.target
Requires=postgresql.service # Dépendance forte (s'arrête si postgres s'arrête)
[Service]
Type=simple # simple | forking | oneshot | notify | idle
User=monapp
Group=monapp
WorkingDirectory=/opt/monapp
ExecStart=/usr/bin/node /opt/monapp/server.js
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -TERM $MAINPID
Redémarrage
Restart=on-failure # no | always | on-failure | on-abnormal
RestartSec=5s
StartLimitIntervalSec=60s # Fenêtre de comptage
StartLimitBurst=3 # Max 3 redémarrages dans la fenêtre
Environnement
Environment="NODE_ENV=production" "PORT=3000"
EnvironmentFile=/etc/monapp/env # Fichier .env (un KEY=value par ligne)
Sécurité
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
ReadWritePaths=/var/lib/monapp
Logs
StandardOutput=journal
StandardError=journal
SyslogIdentifier=monapp # Tag dans journald
[Install]
WantedBy=multi-user.target
Override sans modifier l'original
# Créer un override (s'applique par-dessus le service système)
systemctl edit nginx # Crée /etc/systemd/system/nginx.service.d/override.conf
systemctl edit --full nginx # Copie complète dans /etc/systemd/system/
Exemple d'override pour augmenter les limites
/etc/systemd/system/nginx.service.d/override.conf
[Service]
LimitNOFILE=65536
Environment="NGINX_OPTS=-g 'daemon off;'"
Timers — Alternative aux crons
# /etc/systemd/system/backup.timer
[Unit]
Description=Backup quotidien
[Timer]
OnCalendar=--* 02:30:00 # Chaque jour à 2h30
RandomizedDelaySec=15m # Décalage aléatoire jusqu'à 15min
Persistent=true # Rattraper si manqué (ex: machine éteinte)
[Install]
WantedBy=timers.target
# Syntaxe OnCalendar
OnCalendar=hourly # = -- :00:00
OnCalendar=daily # = --* 00:00:00
OnCalendar=weekly # = Mon --* 00:00:00
OnCalendar=monthly # = --01 00:00:00
OnCalendar=Mon,Thu 08:00 # Lundi et jeudi à 8h
OnCalendar=*:0/15 # Toutes les 15 minutes
Tester une expression
systemd-analyze calendar "Mon,Thu 08:00"
systemd-analyze calendar --iterations=5 "daily"
journald — Logs
# Logs d'un service
journalctl -u nginx # Tous les logs
journalctl -u nginx -f # Suivre en temps réel (tail -f)
journalctl -u nginx --since "1 hour ago"
journalctl -u nginx --since "2024-01-15" --until "2024-01-16"
journalctl -u nginx -n 100 # 100 dernières lignes
journalctl -u nginx -p err # Seulement les erreurs
journalctl -u nginx --no-pager | grep 502 # Pipe vers grep
Filtres avancés
journalctl -p err..crit # Plage de priorité
journalctl _PID=1234 # Par PID
journalctl _UID=1000 # Par UID
journalctl /usr/bin/nginx # Par exécutable
Boot
journalctl -b # Boot courant
journalctl -b -1 # Boot précédent
journalctl --list-boots # Lister tous les boots
Gestion de l'espace
journalctl --disk-usage
journalctl --vacuum-size=500M # Garder max 500 Mo
journalctl --vacuum-time=2weeks # Garder max 2 semaines
Targets (anciens runlevels)
systemctl get-default # Target par défaut
systemctl set-default multi-user.target # Changer le défaut
systemctl isolate rescue.target # Basculer en mode rescue
systemctl reboot
systemctl poweroff
systemctl suspend
systemctl hibernate
Correspondance runlevels
runlevel 1 → rescue.target
runlevel 3 → multi-user.target
runlevel 5 → graphical.target
Analyse du démarrage
systemd-analyze # Temps de boot total
systemd-analyze blame # Services triés par temps de démarrage
systemd-analyze critical-chain # Chemin critique du démarrage
systemd-analyze plot > boot.svg # Graphe SVG du démarrage
systemd-analyze verify /etc/systemd/system/monapp.service # Valider un unit file
Troubleshooting
# Service qui ne démarre pas
journalctl -u monservice -n 50 --no-pager # Voir les erreurs
systemctl status monservice # Code d'exit, signal
systemctl show monservice # Toutes les propriétés
Trouver pourquoi un service est en échec
journalctl -xe # Logs récents avec contexte
Vérifier les dépendances
systemctl list-dependencies monservice --all
Simuler le démarrage
systemd-run --unit=test --pty /bin/bash # Shell dans un scope systemd
Gestion des sockets et scopes
# Socket activation
systemctl list-sockets
systemctl status *.socket
Scope (processus créés par systemd-run)
systemd-run --scope --unit=ma-tache mon-script.sh
systemctl status ma-tache.scope
🔧 Ouvrir tools.rdr-it.com — application complète →
Plus de 40 outils AdminSys gratuits · SSL · DNS · Docker · Nginx · SSH · Mermaid · et plus