Programa un reinicio de servidor Factorio
Factorio es el juego en esta lista que menos necesita un reinicio programado. Está construido para funcionar durante semanas, su uso de memoria es proporcional a la fábrica en lugar de al tiempo de actividad y un servidor sin cabeza dejado solo simplemente seguirá trabajando.
¿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
El servidor se reiniciará en 15 minutos - 10 minutos antesAdvertir
El servidor se reiniciará en 10 minutos - 5 minutos antesAdvertir
El servidor se reiniciará en 5 minutos - 1 minutos antesAdvertir
El servidor se reiniciará en 1 minutos - Hora de reinicioGuardar
/server-save - Hora de reinicioDetener
/quit
Plain text sent over Factorio RCON is printed straight into chat, which is why the broadcast line has no command in front of it. Anything starting with a slash is treated as a command instead.
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-factorio.sh
El script que ejecuta
Guárdalo como /opt/restart-factorio.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 Factorio.
# 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 'El servidor se reiniciará en 15 minutos'
sleep 300
# 10 minute warning
send 'El servidor se reiniciará en 10 minutos'
sleep 300
# 5 minute warning
send 'El servidor se reiniciará en 5 minutos'
sleep 240
# 1 minute warning
send '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 factorio 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 Factorio
La razón para programar uno de todos modos es el guardado, no el reinicio — ejecutar /server-save en un temporizador te da una rotación de puntos de recuperación que los autosaves solos no tienen. Ten en cuenta que el texto plano enviado a través de Factorio's RCON se imprime directamente en el chat, lo que es por qué la línea de advertencia no tiene un comando delante de ella; cualquier cosa que comience con una barra diagonal se trata como un comando en lugar de.