Plane den Restart deines Terraria Servers

Ein Terraria Server ist leicht und ein geplanter Neustart ist mostly über die Speicherrotation und das Aufräumen, was ein langlebiger Prozess angesammelt hat. Es ist eine niedrigkostige Gewohnheit statt einer Notwendigkeit.

Wann sollte es neu starten?

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

Was passiert, der Reihe nach

  1. Job startetWarnen/broadcast Server restartet in 15 Minuten
  2. 10 Minuten vorherWarnen/broadcast Server restartet in 10 Minuten
  3. 5 Minuten vorherWarnen/broadcast Server restartet in 5 Minuten
  4. 1 Minuten vorherWarnen/broadcast Server restartet in 1 Minuten
  5. NeustartzeitSpeichern/save
  6. NeustartzeitStopp/off

These are TShock commands — a vanilla Terraria server has only its local console and no remote access at all. /off saves on the way out; /off-nosave is the one to avoid.

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

Das Skript, das es ausführt

Speichere als /opt/restart-terraria.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 Terraria.
# 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:-7777}"
: "${RCON_PASSWORD:?set RCON_PASSWORD before running}"

send() {
  rcon-cli --host "$RCON_HOST" --port "$RCON_PORT" --password "$RCON_PASSWORD" "$1"
}

# 15 minute warning
send '/broadcast Server restartet in 15 Minuten'

sleep 300
# 10 minute warning
send '/broadcast Server restartet in 10 Minuten'

sleep 300
# 5 minute warning
send '/broadcast Server restartet in 5 Minuten'

sleep 240
# 1 minute warning
send '/broadcast Server restartet in 1 Minuten'

sleep 60
# Flush the world to disk
send '/save'

sleep 10
# Shut down cleanly
send '/off'

# Give the process time to finish writing before anything restarts it.
sleep 30
systemctl start terraria 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 Terraria ist

Diese Befehle sind TShock's – ein vanilla Terraria Server hat nur seine lokale Konsole und keinen Remote-Zugriff, sodass, wenn du vanilla läufst, keines davon gilt und deine Optionen sind ein Bildschirm oder tmux-Sitzung und eine Tastatur. Innerhalb von TShock solltest du vorsichtig sein und /off statt /off-nosave verwenden; die beiden sind ein Tastendruck auseinander und einer davon verwirft alles seit dem letzten Speichern.

Support & Hilfe