Agenda um reinício do servidor Factorio

Factorio é o jogo nesta lista que menos precisa de um reinício agendado. Foi construído para funcionar durante semanas, o seu uso de memória é proporcional à fábrica em vez do tempo de funcionamento, e um servidor headless deixado sozinho simplesmente continuará a funcionar.

Quando deve reiniciar?

Use {{minutes}} onde o número da contagem regressiva deve ir.

O que acontece, na ordem

  1. A tarefa começaAvisarO servidor vai reiniciar em 15 min
  2. 10 min antesAvisarO servidor vai reiniciar em 10 min
  3. 5 min antesAvisarO servidor vai reiniciar em 5 min
  4. 1 min antesAvisarO servidor vai reiniciar em 1 min
  5. Hora do reinícioGuardar/server-save
  6. Hora do reinícioParar/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.

A linha do crontab

Deslocado 15 minutos mais cedo do que a hora escolhida, para que o reinício caia nele em vez de 15 minutos depois.

45 3 * * *  /opt/restart-factorio.sh

O script que executa

Guardar como /opt/restart-factorio.sh e torná-lo executável. Assume que rcon-cli está no caminho e lê a senha do ambiente em vez de a incorporar.

#!/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 'O servidor vai reiniciar em 15 min'

sleep 300
# 10 minute warning
send 'O servidor vai reiniciar em 10 min'

sleep 300
# 5 minute warning
send 'O servidor vai reiniciar em 5 min'

sleep 240
# 1 minute warning
send 'O servidor vai reiniciar em 1 min'

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

O Cron utiliza o fuso horário do servidor, não o teu. Verifica-o com timedatectl antes de presumir que 04:00 é 04:00 onde estás — um container em UTC e um admin na Europa estão duas horas separados no verão e uma no inverno.

A parte específica do Factorio

A razão para agendá-lo mesmo assim é a poupança, não o reinício — executar /server-save num temporizador dá-lhe uma rotativa de pontos de recuperação que as poupanças automáticas não dão. Note que o texto simples enviado através do Factorio's RCON é impresso directamente no chat, o que é por isso que a linha de advertência não tem nenhum comando à sua frente; qualquer coisa que comece com uma barra é tratada como um comando em vez disso.

Suporte e Ajuda