Programa un reinicio de servidor Counter-Strike 2

Un servidor de Counter-Strike 2 no guarda un mundo persistente, así que un reinicio programado es puramente sobre limpiar el estado acumulado y recoger los cambios de configuración. Todos los días es generoso; cada pocos días suele ser suficiente.

¿Cuándo debería reiniciarse?

Usa {{minutes}} donde debería ir el número de la cuenta atrás.

Lo que ocurre, en orden

  1. El trabajo comienzaAdvertirsay El servidor se reiniciará en 15 minutos
  2. 10 minutos antesAdvertirsay El servidor se reiniciará en 10 minutos
  3. 5 minutos antesAdvertirsay El servidor se reiniciará en 5 minutos
  4. 1 minutos antesAdvertirsay El servidor se reiniciará en 1 minutos
  5. Hora de reinicioDetenerquit

Nothing to save. Restart between matches rather than mid-round — a scheduled restart that lands in the middle of a competitive game is worse than no restart at all.

La línea crontab

Desplazado 15 minutos antes de la hora elegida, para que el reinicio caiga en ella en lugar de 15 minutos después.

45 3 * * *  /opt/restart-cs2.sh

El script que ejecuta

Guárdalo como /opt/restart-cs2.sh y hazlo ejecutable. Supone que rcon-cli está en la ruta y lee la contraseña del entorno en lugar de incrustarla.

#!/usr/bin/env bash
set -euo pipefail

# Scheduled restart for Counter-Strike 2.
# Generated by spawnly.net/tools/restart-scheduler

# The password stays out of this file. Put it in the environment, or in a
# file only root can read, and export it before this script runs.
RCON_HOST="${RCON_HOST:-127.0.0.1}"
RCON_PORT="${RCON_PORT:-27015}"
: "${RCON_PASSWORD:?set RCON_PASSWORD before running}"

send() {
  rcon-cli --host "$RCON_HOST" --port "$RCON_PORT" --password "$RCON_PASSWORD" "$1"
}

# 15 minute warning
send 'say El servidor se reiniciará en 15 minutos'

sleep 300
# 10 minute warning
send 'say El servidor se reiniciará en 10 minutos'

sleep 300
# 5 minute warning
send 'say El servidor se reiniciará en 5 minutos'

sleep 240
# 1 minute warning
send 'say El servidor se reiniciará en 1 minutos'

sleep 70
# Shut down cleanly
send 'quit'

# Give the process time to finish writing before anything restarts it.
sleep 30
systemctl start cs2 2>/dev/null || true

El cron utiliza la zona horaria del servidor, no la tuya. Compruébala con timedatectl antes de asumir que las 04:00 son las 04:00 donde estás —un contenedor en UTC y un administrador en Europa tienen dos horas de diferencia en verano y una en invierno.

La parte específica de Counter-Strike 2

La sincronización es el problema principal. Un reinicio que cae en medio de una ronda en un servidor competitivo es peor que no haber reiniciado en absoluto y cron no puede ver el estado del juego, así que el enfoque práctico es elegir una hora en la que el servidor suele estar vacío y aceptar que de vez en cuando no lo estará. Si tu servidor ejecuta mapas personalizados, recuerda que todos tienen que volver a descargar nada pero sí tienen que reconectarse — lo que en un servidor ocupado significa una caída visible.

Soporte & Ayuda