Configurer un service Systemd pour qu’il redémarre périodiquement

By Corentin BURTIN

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 SystemdDescriptionExemple utilisé
OnCalendarRedémarrage à une date préciseOnCalendar=03:00
OnUnitActiveSecRedémarrage après une durée depuis la dernière exécutionOnUnitActiveSec=4h
OnBootSecDélai après le démarrage du systèmeOnBootSec=30min
PersistentAssure 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/ :

A lire également :  Comment changer de Compte d'utilisateur Windows 10 ?

Étapes :

  1. 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
  2. Créer un fichier .timer : sudo nano /etc/systemd/system/mon-service-restart.timer Contenu : [Timer] OnActiveSec=4h OnUnitActiveSec=4h [Install] WantedBy=timers.target
  3. 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 !

A lire également :  Qui gère Ubuntu ?