Programa un reinicio de servidor Terraria

Un servidor de Terraria es ligero y un reinicio programado es principalmente sobre la rotación de guardados y sobre limpiar lo que un proceso de larga duración ha acumulado. Es un hábito barato en lugar de una necesidad.

¿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 comienzaAdvertir/broadcast El servidor se reiniciará en 15 minutos
  2. 10 minutos antesAdvertir/broadcast El servidor se reiniciará en 10 minutos
  3. 5 minutos antesAdvertir/broadcast El servidor se reiniciará en 5 minutos
  4. 1 minutos antesAdvertir/broadcast El servidor se reiniciará en 1 minutos
  5. Hora de reinicioGuardar/save
  6. Hora de reinicioDetener/off

These are TShock commands — a vanilla Terraria server has only its local console and no remote access at all. /off saves on the way out; /off-nosave is the one to avoid.

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

El script que ejecuta

Guárdalo como /opt/restart-terraria.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 Terraria.
# 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:-7777}"
: "${RCON_PASSWORD:?set RCON_PASSWORD before running}"

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

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

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

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

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

sleep 60
# Flush the world to disk
send '/save'

sleep 10
# Shut down cleanly
send '/off'

# Give the process time to finish writing before anything restarts it.
sleep 30
systemctl start terraria 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 Terraria

Estos comandos son TShock's — un servidor Terraria vanilla solo tiene su consola local y ningún acceso remoto en absoluto, así que si estás ejecutando vanilla, nada de esto se aplica y tus opciones son una sesión de pantalla o tmux y un teclado. Dentro de TShock, ten cuidado al usar /off en lugar de /off-nosave; las dos están separadas por una tecla y una de ellas descarta todo desde el último guardado.

Soporte & Ayuda