Plane den Restart deines Team Fortress 2 Servers

Team Fortress 2 Server halten nichts Persistentes, sodass Neustarten über das Aufräumen von Zustand und das Aufgreifen von Konfigurationsänderungen statt dem Schützen von etwas sind. Ein wöchentlicher Neustart reicht für die meisten Community-Server.

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. NeustartzeitStoppquit

Nothing to save. Time the restart for a map change if you can.

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

Das Skript, das es ausführt

Speichere als /opt/restart-tf2.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 Team Fortress 2.
# 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 '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 70
# Shut down cleanly
send 'quit'

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

Versuche, den Neustart auf eine Kartenänderung statt mitten in einer Runde zu legen. Cron kann den Spielstand nicht sehen, also ist der praktische Ansatz, eine Stunde zu wählen, in der der Server normalerweise leer ist und zu akzeptieren, dass gelegentlich es nicht leer sein wird. Wenn dein Server benutzerdefinierte Karten läuft, denke daran, dass jeder, der nach einem Neustart wieder anschließt, alles neu herunterladen muss, aber doch wiederverbinden muss – was auf einem aktiven Server einen sichtbaren Dip bedeutet.

Support & Hilfe