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

  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 reinicioGuardarserver.save
  6. Hora de reinicioDetenerquit

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 || 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 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.

Soporte & Ayuda