Comment redémarrer un service SystemD chaque semaine en utilisant les minuteurs SystemD
L’exemple suivant redémarre un service chaque semaine le dimanche à 06:00 en utilisant les minuteurs SystemD.
Le moyen le plus simple de l’utiliser est d’exécuter le script d’installation automatique ci-dessous, qui crée les fichiers nécessaires et active le minuteur.
Si vous souhaitez le créer manuellement, copiez les fichiers .timer et .service dans /etc/systemd/system/, rechargez systemd avec systemctl daemon-reload puis activez et démarrez le minuteur avec systemctl enable --now myservice-restart.timer.
N’oubliez pas de remplacer myservice par le nom réel de votre service dans tous les fichiers !
Exemple de fichier service
myservice-restart.service
[Unit]
Description=Restart myservice
[Service]
Type=oneshot
ExecStart=/bin/systemctl restart myserviceExemple de fichier minuteur
myservice-restart.timer
[Unit]
Description=Restart myservice every Sunday at 06:00
[Timer]
OnCalendar=Sun *-*-* 06:00:00 # No inline comments allowed here!
Persistent=true
[Install]
WantedBy=timers.targetScript d’installation automatique
install-weekly-autorestart.sh
#!/bin/bash
# TODO Définir le nom du service ici
SERVICE_NAME="myservice"
# Configuration optionnelle
TIMER_NAME="${SERVICE_NAME}-restart"
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
TIMER_FILE="/etc/systemd/system/${TIMER_NAME}.timer"
SERVICE_RESTART_FILE="/etc/systemd/system/${TIMER_NAME}.service"
# Vérifier si le script est exécuté en tant que root
if [ "$(id -u)" -ne 0 ]; then
echo "Erreur : Ce script doit être exécuté en tant que root (utilisez sudo)." >&2
exit 1
fi
# Vérifier si le service cible existe
if [ ! -f "$SERVICE_FILE" ]; then
echo "Erreur : Le fichier de service '$SERVICE_FILE' n'existe pas. Créez-le d'abord." >&2
exit 1
fi
# Créer le fichier service du minuteur (oneshot pour redémarrer le service cible)
cat > "$SERVICE_RESTART_FILE" <<EOF
[Unit]
Description=Restart $SERVICE_NAME
[Service]
Type=oneshot
ExecStart=/bin/systemctl restart $SERVICE_NAME
EOF
# Créer le fichier minuteur (pas de commentaires en ligne dans OnCalendar !)
cat > "$TIMER_FILE" <<EOF
[Unit]
Description=Restart $SERVICE_NAME every Sunday at 06:00
[Timer]
OnCalendar=Sun *-*-* 06:00:00
Persistent=true
[Install]
WantedBy=timers.target
EOF
# Recharger systemd, activer et démarrer le minuteur
echo "Rechargement de systemd..."
systemctl daemon-reload
echo "Activation et démarrage du minuteur..."
systemctl enable --now "$TIMER_NAME.timer"
# Vérifier que le minuteur est actif
echo "Vérification du statut du minuteur..."
systemctl list-timers --all | grep "$TIMER_NAME"
echo "Installation terminée !"
echo "Le service '$SERVICE_NAME' redémarrera maintenant chaque dimanche à 06:00."If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow