Plane den Restart deines Garry's Mod Servers
Garry's Mod Server verschlechtern sich auf eine ungewöhnlich sichtbare Weise – addon-heavy Gamemodes lecken Lua-Status, Entity-Zahlen steigen und ein Server, der gestern noch gut lief, ist heute merklich schlechter.
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 - NeustartzeitStopp
quit
There is no world to save — Garry’s Mod builds nothing persistent by default, so the restart is just a clean process exit. Gamemodes that do persist data usually save continuously.
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-gmod.sh
Das Skript, das es ausführt
Speichere als /opt/restart-gmod.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 Garry's Mod.
# 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 gmod 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 Garry's Mod ist
Es gibt nichts zu speichern. Die Standard-Gamemodes bauen nichts Persistentes, und Gamemodes, die persistente Daten halten, schreiben sie normalerweise kontinuierlich statt beim Shutdown. Das macht die Sequenz hier einfacher als überall sonst auf dieser Liste: warne, dann quit. Wenn dein Gamemode Zustand im Speicher hält, überprüfe seine Dokumentation, bevor du annimmst, dass ein sauberer Exit reicht.