Cómo reiniciar un servicio de SystemD semanalmente usando temporizadores de SystemD
El siguiente ejemplo reinicia un servicio cada semana el domingo a las 06:00 usando temporizadores de SystemD.
La forma más fácil de usarlo es mediante el script de autoinstalación a continuación, que crea los archivos necesarios y activa el temporizador.
Si desea crearlo manualmente, copie los archivos .timer y .service a /etc/systemd/system/, recargue systemd usando systemctl daemon-reload y active e inicie el temporizador usando systemctl enable --now myservice-restart.timer.
¡No olvide reemplazar myservice con el nombre real de su servicio en todos los archivos!
Ejemplo de archivo de servicio
myservice-restart.service
[Unit]
Description=Restart myservice
[Service]
Type=oneshot
ExecStart=/bin/systemctl restart myserviceEjemplo de archivo de temporizador
myservice-restart.timer
[Unit]
Description=Restart myservice every Sunday at 06:00
[Timer]
OnCalendar=Sun *-*-* 06:00:00 # No se permiten comentarios en línea aquí
Persistent=true
[Install]
WantedBy=timers.targetScript de autoinstalación
install-weekly-autorestart.sh
#!/bin/bash
# TODO Definir el nombre del servicio aquí
SERVICE_NAME="myservice"
# Configuración opcional
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"
# Verificar si el script se ejecuta como root
if [ "$(id -u)" -ne 0 ]; then
echo "Error: This script must be run as root (use sudo)." >&2
exit 1
fi
# Verificar si el servicio destino existe
if [ ! -f "$SERVICE_FILE" ]; then
echo "Error: Service file '$SERVICE_FILE' does not exist. Create it first." >&2
exit 1
fi
# Crear el archivo de servicio del temporizador (oneshot para reiniciar el servicio destino)
cat > "$SERVICE_RESTART_FILE" <<EOF
[Unit]
Description=Restart $SERVICE_NAME
[Service]
Type=oneshot
ExecStart=/bin/systemctl restart $SERVICE_NAME
EOF
# Crear el archivo del temporizador (sin comentarios en línea en 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
# Recargar systemd, activar e iniciar el temporizador
echo "Reloading systemd..."
systemctl daemon-reload
echo "Enabling and starting the timer..."
systemctl enable --now "$TIMER_NAME.timer"
# Verificar que el temporizador esté activo
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."Si este artículo te ha ayudado, considera invitarme a un café o hacer una donación vía PayPal para apoyar la investigación y publicación de nuevos artículos en TechOverflow