Wie man einen SystemD-Service wöchentlich mit SystemD-Timern neu startet
Das folgende Beispiel startet einen Service jede Woche am Sonntag um 06:00 Uhr mit SystemD-Timern neu.
Der einfachste Weg, dies zu verwenden, ist das Autoinstall-Skript unten zu verwenden, das die notwendigen Dateien erstellt und den Timer aktiviert.
Wenn du es manuell erstellen möchtest, kopiere die .timer- und .service-Dateien nach /etc/systemd/system/, lade systemd mit systemctl daemon-reload neu und aktiviere und starte den Timer mit systemctl enable --now myservice-restart.timer.
Vergiss nicht, myservice durch den tatsächlichen Namen deines Service in allen Dateien zu ersetzen!
Service-Datei-Beispiel
myservice-restart.service
[Unit]
Description=Restart myservice
[Service]
Type=oneshot
ExecStart=/bin/systemctl restart myserviceTimer-Datei-Beispiel
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.targetAutoinstall-Skript
install-weekly-autorestart.sh
#!/bin/bash
# TODO Define service name here
SERVICE_NAME="myservice"
# Optional configuation
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"
# Prüfen, ob das Skript als root ausgeführt wird
if [ "$(id -u)" -ne 0 ]; then
echo "Error: This script must be run as root (use sudo)." >&2
exit 1
fi
# Prüfen, ob der Ziel-Dienst existiert
if [ ! -f "$SERVICE_FILE" ]; then
echo "Error: Service file '$SERVICE_FILE' does not exist. Create it first." >&2
exit 1
fi
# Timer-Dienstdatei erstellen (oneshot, um den Ziel-Dienst neu zu starten)
cat > "$SERVICE_RESTART_FILE" <<EOF
[Unit]
Description=Restart $SERVICE_NAME
[Service]
Type=oneshot
ExecStart=/bin/systemctl restart $SERVICE_NAME
EOF
# Timer-Datei erstellen (keine Inline-Kommentare in 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
# Reload systemd, enable, and start the timer
echo "Reloading systemd..."
systemctl daemon-reload
echo "Enabling and starting the timer..."
systemctl enable --now "$TIMER_NAME.timer"
# Verify the timer is active
echo "Verifying timer status..."
systemctl list-timers --all | grep "$TIMER_NAME"
echo "Installation complete!"
echo "The service '$SERVICE_NAME' will now restart every Sunday at 06:00."Wenn dieser Beitrag dir geholfen hat, erwäge, mir einen Kaffee zu spendieren oder per PayPal zu spenden, um die Recherche und Veröffentlichung neuer Beiträge auf TechOverflow zu unterstützen