Programa un reinicio de servidor Don't Starve Together

Don't Starve Together está diseñado para ejecutarse continuamente — el mundo avanzando mientras nadie juega es el punto. Los reinicios son sobre la recuperación de memoria a lo largo del tiempo en lugar de sobre algo que el juego necesite.

¿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 comienzaAdvertirc_announce("El servidor se reiniciará en 15 minutos")
  2. 10 minutos antesAdvertirc_announce("El servidor se reiniciará en 10 minutos")
  3. 5 minutos antesAdvertirc_announce("El servidor se reiniciará en 5 minutos")
  4. 1 minutos antesAdvertirc_announce("El servidor se reiniciará en 1 minutos")
  5. Hora de reinicioGuardarc_save()
  6. Hora de reinicioDetenerc_shutdown()

The console takes Lua, which is why these look like function calls. In a cluster with caves you must send the sequence to every shard — each one is a separate server with its own world to save.

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

El script que ejecuta

Guárdalo como /opt/restart-dst.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 Don't Starve Together.
# 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:-10998}"
: "${RCON_PASSWORD:?set RCON_PASSWORD before running}"

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

# 15 minute warning
send 'c_announce("El servidor se reiniciará en 15 minutos")'

sleep 300
# 10 minute warning
send 'c_announce("El servidor se reiniciará en 10 minutos")'

sleep 300
# 5 minute warning
send 'c_announce("El servidor se reiniciará en 5 minutos")'

sleep 240
# 1 minute warning
send 'c_announce("El servidor se reiniciará en 1 minutos")'

sleep 60
# Flush the world to disk
send 'c_save()'

sleep 10
# Shut down cleanly
send 'c_shutdown()'

# Give the process time to finish writing before anything restarts it.
sleep 30
systemctl start dst 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 Don't Starve Together

La consola toma Lua, lo que es por qué los comandos parecen llamadas a funciones. La parte importante es el clúster: un mundo con cuevas se ejecuta como dos servidores separados con dos guardados separados, y la secuencia debe llegar a ambos. Enviarlo solo al shard maestro guarda la superficie y abandona todo lo que está debajo.

Soporte & Ayuda