Plane den Restart deines Rust Servers

Rust Server sammeln unerbittlich Entitäten durch einen Wipe-Zyklus an – jede Foundation, jedes Schlafbeutel, jeder fallengelassene Gegenstand ist etwas, das der Server simuliert. Die Leistung am Ende eines Wipe-Zyklus ist messbar schlechter als zu Beginn, und ein täglicher Neustart holt einen nützlichen Teil davon zurück.

Wann sollte es neu starten?

Verwende {{minutes}}, wo die Countdown-Nummer hingehen sollte.

Was passiert, der Reihe nach

  1. Job startetWarnensay "Server restartet in 15 Minuten"
  2. 10 Minuten vorherWarnensay "Server restartet in 10 Minuten"
  3. 5 Minuten vorherWarnensay "Server restartet in 5 Minuten"
  4. 1 Minuten vorherWarnensay "Server restartet in 1 Minuten"
  5. NeustartzeitSpeichernserver.save
  6. NeustartzeitStoppquit

quit saves before exiting. Rust writes large save files, so allow the process a minute to finish rather than following up with a kill.

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

Das Skript, das es ausführt

Speichere als /opt/restart-rust.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 Rust.
# 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:-28016}"
: "${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 'server.save'

sleep 10
# Shut down cleanly
send 'quit'

# Give the process time to finish writing before anything restarts it.
sleep 30
systemctl start rust 2>/dev/null || true

Der 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 Rust ist

Rust schreibt eine große Speicherdatei und braucht dafür realen Zeit. Folge dem Quit nicht mit einem Kill oder einem Container-Neustart auf einem kurzen Timer; gib dem Prozess mindestens eine Minute. Das andere, worauf du planen solltest, ist, dass ein Neustart während der Hauptverkehrszeit einen Server leert – Spieler, die während eines Raids getrennt werden, kommen nicht zurück, also plane für die stillste Stunde deiner Bevölkerung.

Support & Hilfe