Programa un reinicio de servidor Team Fortress 2
Team Fortress 2 servidores no guardan nada persistente, así que reiniciar es sobre limpiar el estado y recoger los cambios de configuración en lugar de proteger algo. Un reinicio semanal es suficiente para la mayoría de los servidores comunitarios.
¿Cuándo debería reiniciarse?
Usa {{minutes}} donde debería ir el número de la cuenta atrás.
Lo que ocurre, en orden
- El trabajo comienzaAdvertir
say El servidor se reiniciará en 15 minutos - 10 minutos antesAdvertir
say El servidor se reiniciará en 10 minutos - 5 minutos antesAdvertir
say El servidor se reiniciará en 5 minutos - 1 minutos antesAdvertir
say El servidor se reiniciará en 1 minutos - Hora de reinicioDetener
quit
Nothing to save. Time the restart for a map change if you can.
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-tf2.sh
El script que ejecuta
Guárdalo como /opt/restart-tf2.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 Team Fortress 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 tf2 2>/dev/null || trueEl 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 Team Fortress 2
Intenta aterrizar el reinicio en un cambio de mapa en lugar de en medio de una ronda. 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.