Plane den Restart deines 7 Days to Die Servers
Der Speicherverbrauch eines 7 Days to Die Servers verfolgt, wie viel der Karte erkundet und wie viel gebaut wurde, und keines davon geht zurück. Ein täglicher Neustart hält den Server durch einen langen Durchlauf responsiv, was am meisten bei den Hordenächten zählt, an denen alle tatsächlich teilnehmen.
Wann sollte es neu starten?
Verwende {{minutes}}, wo die Countdown-Nummer hingehen sollte.
Was passiert, der Reihe nach
- Job startetWarnen
say "Server restartet in 15 Minuten" - 10 Minuten vorherWarnen
say "Server restartet in 10 Minuten" - 5 Minuten vorherWarnen
say "Server restartet in 5 Minuten" - 1 Minuten vorherWarnen
say "Server restartet in 1 Minuten" - NeustartzeitSpeichern
saveworld - NeustartzeitStopp
shutdown
The console here is telnet rather than RCON. Reach it over an SSH tunnel or from the machine itself — the telnet port must not be forwarded, because it authenticates with a password in clear text.
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-seven_days_to_die.sh
Das Skript, das es ausführt
Speichere als /opt/restart-seven_days_to_die.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 7 Days to Die.
# 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:-8081}"
: "${RCON_PASSWORD:?set RCON_PASSWORD before running}"
send() {
rcon-cli --host "$RCON_HOST" --port "$RCON_PORT" --password "$RCON_PASSWORD" "$1"
}
# 15 minute warning
send 'say "Server restartet in 15 Minuten"'
sleep 300
# 10 minute warning
send 'say "Server restartet in 10 Minuten"'
sleep 300
# 5 minute warning
send 'say "Server restartet in 5 Minuten"'
sleep 240
# 1 minute warning
send 'say "Server restartet in 1 Minuten"'
sleep 60
# Flush the world to disk
send 'saveworld'
sleep 10
# Shut down cleanly
send 'shutdown'
# Give the process time to finish writing before anything restarts it.
sleep 30
systemctl start seven_days_to_die 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 7 Days to Die ist
Das Konsol hier ist telnet, nicht RCON, und telnet sendet sein Passwort in Klartext. Führe das Skript auf dem Server selbst aus oder erreiche den Port durch einen SSH-Tunnel – niemals durch Weiterleitung. Zeit den Neustart weg von Tag sieben und seinen Multiples: ein Neustart, der in die Mitte eines Blutmondes fällt, ist der schlechteste mögliche Zeitpunkt, und das Schema weiß das nicht, es sei denn, du planst es.