Plane den Restart deines Factorio Servers
Factorio ist das Spiel auf dieser Liste, das am wenigsten einen geplanten Neustart benötigt. Es ist dafür gebaut, wochenlang zu laufen, sein Speicherverbrauch ist proportional zur Fabrik und ein kopfloser Server, der alleine gelassen wird, arbeitet einfach weiter.
Wann sollte es neu starten?
Verwende {{minutes}}, wo die Countdown-Nummer hingehen sollte.
Was passiert, der Reihe nach
- Job startetWarnen
Server restartet in 15 Minuten - 10 Minuten vorherWarnen
Server restartet in 10 Minuten - 5 Minuten vorherWarnen
Server restartet in 5 Minuten - 1 Minuten vorherWarnen
Server restartet in 1 Minuten - NeustartzeitSpeichern
/server-save - NeustartzeitStopp
/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.
Die crontab-Zeile
Verschoben um 15 Minuten früher als deine gewählte Zeit, damit der Neustart selbst auf ihr landet, anstatt 15 Minuten danach.
45 3 * * * /opt/restart-factorio.sh
Das Skript, das es ausführt
Speichere als /opt/restart-factorio.sh und mache es ausführbar. Es geht davon aus, dass rcon-cli auf dem Pfad ist und liest das Passwort aus der Umgebung anstatt es einzubetten.
#!/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 'Server restartet in 15 Minuten'
sleep 300
# 10 minute warning
send 'Server restartet in 10 Minuten'
sleep 300
# 5 minute warning
send 'Server restartet in 5 Minuten'
sleep 240
# 1 minute warning
send 'Server restartet in 1 Minuten'
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 || trueDer Cron verwendet die Zeitzone des Servers, nicht deine. Überprüfe sie mit timedatectl, bevor du davon ausgehst, dass 04:00 Uhr 04:00 Uhr bedeutet – ein Container in UTC und ein Admin in Europa sind im Sommer zwei Stunden und im Winter eine Stunde auseinander.
Der Teil, der spezifisch für Factorio ist
Der Grund, warum man ihn trotzdem plant, ist das Speichern, nicht der Neustart – das Ausführen von /server-save auf einem Timer gibt dir eine Rotation von Wiederherstellungspunkten, die Autospiele alleine nicht haben. Beachte, dass einfacher Text, der über Factorio's RCON gesendet wird, direkt in den Chat gedruckt wird, was der Grund ist, warum die Warnzeile keinen Befehl vor sich hat; alles, was mit einem Schrägstrich beginnt, wird als Befehl behandelt.