Programa un reinicio de servidor Rust
Los servidores de Rust acumulan el número de entidades de manera implacable a través de un ciclo de borrado — cada fundación, cada saco de dormir, cada elemento caído es una cosa que simula el servidor. El rendimiento al final de un ciclo de borrado es visiblemente peor que al principio, y un reinicio diario recupera una cantidad útil de él.
¿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 reinicioGuardar
server.save - Hora de reinicioDetener
quit
quit saves before exiting. Rust writes large save files, so allow the process a minute to finish rather than following up with a kill.
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-rust.sh
El script que ejecuta
Guárdalo como /opt/restart-rust.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 Rust.
# 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:-28016}"
: "${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 60
# Flush the world to disk
send 'server.save'
sleep 10
# Shut down cleanly
send 'quit'
# Give the process time to finish writing before anything restarts it.
sleep 30
systemctl start rust 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 Rust
Rust escribe un archivo de guardado grande y tarda tiempo real en hacerlo. No sigas el cierre con un matar o un reinicio de contenedor en un temporizador corto; da al proceso al menos un minuto. Lo otro que debes planificar es que un reinicio durante las horas pico vacía un servidor — los jugadores que se desconectan durante un raid no vuelven, así que programa para la hora más tranquila que tenga tu población.