Dans un environnement Linux, garantir la disponibilité constante des services est un enjeu clé pour les administrateurs système. Grâce à Systemd, il est possible de configurer des redémarrages périodiques de services, une solution précieuse pour contrer les fuites de mémoire, les instabilités applicatives ou orchestrer des maintenances planifiées.
Cet article vous guide dans cette configuration avec des exemples pratiques, des conseils d’optimisation et les erreurs à éviter.
À retenir :
- Systemd permet de redémarrer un service automatiquement avec des timers ou des directives spécifiques.
- Cette approche est idéale pour les services instables ou nécessitant une maintenance régulière.
- L’intégration native avec journalctl offre un excellent suivi des exécutions.
Les avantages des redémarrages programmés avec Systemd
« Automatiser, c’est anticiper les défaillances pour mieux les éviter. »
Julien Castor, architecte DevOps
Configurer un redémarrage périodique via Systemd permet de :
- Gérer les applications à long uptime sujettes aux fuites de mémoire.
- Maintenir une disponibilité maximale sans intervention manuelle.
- Assurer une meilleure observabilité grâce à
journalctl.
Redémarrer un service périodiquement avec un timer
Systemd propose un système de timers riche, plus puissant que cron, car étroitement intégré à la logique des services.
Tableau des options de timers pour redémarrage périodique Systemd
| Option Systemd | Description | Exemple utilisé |
|---|---|---|
| OnCalendar | Redémarrage à une date précise | OnCalendar=03:00 |
| OnUnitActiveSec | Redémarrage après une durée depuis la dernière exécution | OnUnitActiveSec=4h |
| OnBootSec | Délai après le démarrage du système | OnBootSec=30min |
| Persistent | Assure l’exécution même après un redémarrage manqué | Persistent=true |
Créer un timer Systemd pour redémarrer un service
« Redémarrer un service n’est pas un aveu d’échec, c’est un gage de continuité. »
Chloé Bernard, ingénieure systèmes
Pour planifier un redémarrage régulier, vous devez créer deux fichiers dans /etc/systemd/system/ :
Étapes :
- Créer un service « oneshot » : sudo nano /etc/systemd/system/mon-service-restart.service Contenu : [Unit] Description=Redémarrage périodique de mon-service [Service] Type=oneshot ExecStart=/bin/systemctl restart mon-service.service
- Créer un fichier .timer : sudo nano /etc/systemd/system/mon-service-restart.timer Contenu : [Timer] OnActiveSec=4h OnUnitActiveSec=4h [Install] WantedBy=timers.target
- Activer et démarrer le timer : sudo systemctl daemon-reload sudo systemctl enable mon-service-restart.timer sudo systemctl start mon-service-restart.timer
Configurer des redémarrages par directives de service
Vous pouvez intégrer le redémarrage directement dans la configuration d’un service existant :
Paramètres essentiels :
[Service]
Restart=always
RestartSec=25
RuntimeMaxSec=41400
- Restart permet un redémarrage automatique, même sans erreur.
- RestartSec définit l’attente entre deux redémarrages.
- RuntimeMaxSec force l’arrêt du service après un certain temps.
Retour d’expérience : « On a résolu des plantages nocturnes récurrents sur notre API Node.js en utilisant RuntimeMaxSec et Restart=always. » — Lucien, DevOps chez Koenix
Alternatives avec Cron pour les nostalgiques
« Cron fait le job, mais il ne parle pas Systemd. » — Nathalie Aubry, admin sys indépendante
Il est encore possible d’utiliser cron pour redémarrer un service :
crontab -e
Puis ajoutez :
30 10 * * 1-5 /usr/bin/systemctl restart mon-service.service
Moins intégré, cron reste utile dans des environnements hybrides ou anciens.
Configurations avancées et pièges courants
« Quand un service plante à 3h du matin, mieux vaut qu’il sache se relever tout seul. »
Rachid Tounsi, ingénieur système chez Securinux
Utiliser OnCalendar pour la maintenance planifiée
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
Cette option garantit un redémarrage quotidien à heure fixe, même si le système a été éteint temporairement.
Surveiller les timers
systemctl list-timers –all
Diagnostiquer via journalctl
journalctl -u mon-service.service
journalctl -u mon-service-restart.service
Et vous, quels services Linux redémarrez-vous automatiquement avec Systemd ? Partagez vos astuces et retours d’expérience en commentaire !