-
Notifications
You must be signed in to change notification settings - Fork 0
Cheatsheet Tagesbetrieb
← Home
Kompakte Alltags-Befehlsseite für den B42-Dedicated-Server dieses Repos. Alles, was beim Betrieb täglich gebraucht wird, in Tabellenform — Befehle, Wirkung und Pfade jeweils 1:1 aus dem Repo-Klon.
Vertieft in Repo: Makefile, scripts/, systemd/; Detailseiten
Makefile-Referenz, Skripte-Referenz, systemd-Referenz,
Monitoring-und-Alerts, Backup-und-Restore, Admin-Befehle.
- Alle Befehle aus dem Repo-Root aufrufen, nicht aus
scripts/(Repo-Default; Makefile-Pfade sind relativ). -
.envmuss im Repo-Root existieren und ausführbar gelesen werden können (Repo-Default; sonst brechen Skripte mit „.env fehlt. Erst: cp .env.example .env und Werte setzen." ab). - Shell-Skripte brauchen Exec-Bits (Repo-Default); nach einem
git cloneohne gesetzte Bits zuerstchmod +x scripts/*.sh scripts/lib/*.shausführen. -
sudowird fürmake start/stop/restart/logs/statusund fürmonitor.sh-Cron-Aufrufe gebraucht (Repo-Default, Makefile 1:1).
Reihenfolge und Wirkung: Repo-Default (1:1 aus projectzomboid-repo/Makefile).
| Befehl | Wirkung | Detail |
|---|---|---|
make / make help
|
Alle Targets mit Kurzbeschreibung anzeigen (Default-Ziel) | Makefile-Referenz |
make install |
Erstinstallation (SteamCMD, App 380870, Verzeichnisse) | Quickstart-Linux |
make render |
Configs aus Templates + .env generieren (envsubst) | Server-Konfiguration |
make mods |
Modliste aus mods.yaml validieren + generieren |
Mods-Referenz |
make spawns |
Spawn-Configs aus spawns.yaml generieren |
Spawn-System |
make validate |
mods.yaml + Shell-Skripte prüfen (shellcheck, falls vorhanden) |
Mods-Referenz |
make start |
Server starten (sudo systemctl start zomboid) |
systemd-Referenz |
make stop |
Server stoppen (sudo systemctl stop zomboid) |
systemd-Referenz |
make restart |
Server neustarten (sudo systemctl restart zomboid) |
systemd-Referenz |
make status |
Service-Status + Healthcheck (systemctl status + healthcheck.sh) |
Monitoring-und-Alerts |
make logs |
Live-Logs anzeigen (sudo journalctl -u zomboid -f) |
Monitoring-und-Alerts |
make update |
Sicheres Update (Backup -> Update -> Healthcheck -> Rollback) | Updates-und-Rollback |
make backup |
Manuelles Backup (backup.sh) |
Backup-und-Restore |
make restore |
Backup wiederherstellen, interaktiv (restore.sh) |
Backup-und-Restore |
make healthcheck |
Healthcheck einzeln ausführen (healthcheck.sh) |
Monitoring-und-Alerts |
make failover-sync |
Backups in GCP-Bucket spiegeln (gcp/sync-backups.sh) |
GCP-Failover |
Anzahl der Targets: 16 (Repo-Default, 1:1 aus .PHONY-Zeile im Makefile).
Die Hilfe zeigt jederzeit make ohne Argument; das Default-Ziel ist help
durch .DEFAULT_GOAL := help (Repo-Default).
Aus den Repo-Skripten (1:1 gelistet in Monitoring-und-Alerts). Farbcodes dezimal aus den Skripten.
| Ereignis | Quelle | Farbe (dezimal) |
|---|---|---|
| Update-Zyklus gestartet (Server geht gleich offline) | update.sh |
15105570 |
| Update erfolgreich, Server läuft | update.sh |
3066993 |
| FEHLER — Rollback auf Pre-Update-Backup | update.sh |
15158332 |
| Rollback erfolgreich, alter Stand läuft | update.sh |
3066993 |
| KRITISCH: Rollback-Healthcheck fehlgeschlagen | update.sh |
15158332 |
| Backup FEHLGESCHLAGEN | backup.sh |
15158332 |
Naechtliches Backup OK (nur bei Label daily) |
backup.sh |
3066993 |
| Restore erfolgreich (mit Backup-Dateiname) | restore.sh |
3066993 |
| Server war abgestürzt und neu gestartet (Watchdog) | monitor.sh |
15105570 |
| KRITISCH: Watchdog-Neustart fehlgeschlagen | monitor.sh |
15158332 |
| Installation abgeschlossen (Erstinstallation) | install.sh |
3066993 |
Hex-Umrechnung zur Orientierung: 15105570 = #E67E22 (Orange/Warnung),
3066993 = #2ECC71 (Grün/OK), 15158332 = #E74C3C (Rot/Kritisch) (Heuristik).
Ein normaler make start/make stop sendet kein Discord-Event
(Repo-Stand).
restore.sh zeigt die verfügbaren Backups automatisch nummeriert an
(1:1 aus scripts/restore.sh). Wer die Liste vorher sehen will, ohne den
Restore zu starten:
ls -1t "${BACKUP_DIR}"/*.tar.gz 2>/dev/null | head -20BACKUP_DIR per Repo-Default /opt/pzserver/backups (Repo-Default).
Backups tragen das Schema <label>-<datum>-<uhrzeit>.tar.gz, z. B.
daily-20260816-040001.tar.gz oder pre-restore-20260816-153022.tar.gz
(Repo-Default aus scripts/backup.sh).
make healthcheck läuft drei Prüfungen (1:1 aus scripts/healthcheck.sh):
| Ausgabe | Bedeutung | Exit-Code |
|---|---|---|
OK: Server-Prozess aktiv |
Java-Prozess läuft ODER Service aktiv | 0 |
OK: UDP <GAME_PORT> gebunden |
UDP-Port sichtbar (16261 per Repo-Default) | 0 |
WARN: Port <GAME_PORT> nicht sichtbar (Server evtl. noch am Starten) |
Port fehlt — typisch direkt nach start
|
0 (zählt nicht als Fehler, Repo-Default) |
FAIL: Kein Server-Prozess gefunden |
Weder pgrep noch systemctl sehen den Server |
1 |
FAIL: Kritische Fehler im Log (letzte 5 Min) |
OutOfMemory/Exception in thread/FATAL im Journal |
1 |
Detaillierte Deutung: Monitoring-und-Alerts.
Wer kurz prüfen will, ob die Kiste noch ausreicht (alle Befehle Heuristik/Standard-Linux, nicht im Repo selbst verankert):
| Frage | Befehl |
|---|---|
| Welcher Kern ist heiß? | pidstat -t -p $(pgrep -fi zomboid) 2 |
| Warten auf Storage? |
vmstat 2 (Spalte wa) |
| Gerätelatenz? |
iostat -x 2 (Spalte await) |
| Aktuelle Spielerzahl? | In-Game via /players (siehe Admin-Befehle) |
| RAM-Heap des Servers? | ps -o rss= -p $(pgrep -fi zomboid) |
Vertiefung: Performance-Guide und docs/09-performance.md.
Unit-Name zomboid ist Repo-Default (1:1 aus systemd/zomboid.service).
| Befehl | Wirkung | Anmerkung |
|---|---|---|
sudo systemctl start zomboid |
Server starten | Entspricht make start (Repo-Default) |
sudo systemctl stop zomboid |
Server stoppen | Vor manuellen Stopps touch .planned-stop (Heuristik; siehe Wartung-und-Automatik) |
sudo systemctl restart zomboid |
Server neustarten | Hart-Neustart — sauberer Weg: /quit als Admin |
sudo systemctl status zomboid --no-pager |
Status inkl. Neustart-Historie | Entspricht make status (Repo-Default) |
sudo systemctl enable zomboid |
Autostart nach Boot aktivieren | systemd-Referenz |
sudo systemctl daemon-reload |
Unit-Files neu einlesen | Nach jeder Änderung an Unit-Dateien nötig |
| `sudo systemctl list-timers --all | grep zomboid` | Backup- und Update-Timer anzeigen |
Detailseiten: Monitoring-und-Alerts.
| Frage | Befehl |
|---|---|
| Was passiert gerade? (live folgen) |
sudo journalctl -u zomboid -f (= make logs, Repo-Default) |
| Die letzten 100 Zeilen ansehen | sudo journalctl -u zomboid -n 100 --no-pager |
| Nur Fehler (wie der Healthcheck sie sucht) | sudo journalctl -u zomboid --no-pager | grep -iE "OutOfMemory|Exception in thread|FATAL" |
| Fehler der letzten 5 Minuten | sudo journalctl -u zomboid --since "5 min ago" --no-pager |
| Seit einem Zeitpunkt (z. B. nach Update) | sudo journalctl -u zomboid --since "2026-08-15 03:00" --no-pager |
Die Schlüsselwörter OutOfMemory, Exception in thread, FATAL stammen
1:1 aus scripts/healthcheck.sh (Repo-Default); alles, was dort in den
letzten 5 Minuten matcht, lässt den Healthcheck rot werden.
Aufruf immer aus dem Repo-Root (Repo-Default). bash davor ist nötig,
falls die Exec-Bits nach dem Klon fehlen.
| Befehl | Wirkung |
|---|---|
bash scripts/announce.sh |
RCON-Countdown an Spieler (15/5/1 Min) vor Neustart |
bash scripts/announce.sh && sleep 30 && sudo systemctl stop zomboid |
Manueller Warn-Countdown + Stop |
bash scripts/healthcheck.sh |
Prozess + UDP-Port + Log-Fehler prüfen |
bash scripts/backup.sh |
tar.gz-Backup mit Rotation (Label daily) |
bash scripts/backup.sh pre-update |
Benanntes Backup (z. B. vor Wartung) |
bash scripts/restore.sh |
Interaktives Wiederherstellen aus Backup-Verzeichnis |
bash scripts/update.sh |
Sicherer Update-Zyklus (Backups vor Update, Auto-Rollback) |
bash scripts/notify.sh "Titel" "Text" [color] |
Manueller Discord-Ping (Color dezimal, Default 3447003 blau) |
bash scripts/monitor.sh |
Watchdog (Cron, normalerweise nie manuell) |
backup.sh akzeptiert ein optionales Label als Argument (1:1 aus dem
Skript: LABEL="${1:-daily}"); daily triggert zusätzlich die Discord-
„Naechtliches Backup OK"-Notification. restore.sh ist interaktiv — Auswahl
per Nummer, dann j/n zur Bestätigung (1:1 aus scripts/restore.sh).
Pfade 1:1 aus dem Repo-Setup (Repo-Default).
| Pfad | Inhalt |
|---|---|
${PZ_DATA_DIR}/Saves/ |
Weltspeicher-Daten (/opt/pzserver/Zomboid/Saves per Repo-Default) |
${PZ_DATA_DIR}/Server/ |
servertest.ini, Sandbox-Lua, Spawn-Lua (Repo-Default) |
${PZ_DATA_DIR}/Server/servertest.ini |
Hauptkonfig des Default-Servers (Repo-Default; entsteht nach make render) |
${PZ_DATA_DIR}/Saves/Multiplayer/<world>/ |
Welt + Cell-Daten, Hauptziel jedes Backups (Repo-Default) |
${PZ_DATA_DIR}/db/ |
Datenbankdateien des Servers (Community-Quelle: pzwiki) |
${BACKUP_DIR}/ |
Backup-Archive (/opt/pzserver/backups per Repo-Default) |
${REPO_ROOT}/logs/server.log |
Skript-Logs aller Repo-Skripte (Repo-Default; Logging aus lib/common.sh) |
${REPO_ROOT}/config/generated/workshop-items.txt |
Generierte Workshop-/Mod-Liste aus mods.yaml (Repo-Default) |
${REPO_ROOT}/.planned-stop |
Lockfile: geplanter Stopp, kein Watchdog-Neustart (Repo-Default) |
sudo journalctl -u zomboid |
Unit-Journal (Repo-Default) |
Für einmalige In-Game-Ansagen via RCON (Host im Repo hardkodiert auf 127.0.0.1 — siehe Admin-Befehle):
mcrcon -H 127.0.0.1 -P "${RCON_PORT}" -p "${RCON_PASSWORD}" \
'servermsg "Hallo, Welt!"'Werte aus .env (Repo-Defaults: RCON_PORT=27015, RCON_PASSWORD=CHANGE_ME).
Der Verbindungsaufruf ist 1:1 aus scripts/announce.sh. Guard dort:
RCON_ENABLED muss true sein, sonst macht das Skript still exit 0.
Wenn der Server nicht mehr reagiert und Backups altern:
-
Stop:
sudo systemctl stop zomboid(vorhertouch .planned-stop, falls der Watchdog läuft — siehe Wartung-und-Automatik). -
Aktuellen Stand sichern:
bash scripts/backup.sh pre-restore(schreibt ein Label-Backup vor jedem Restore; 1:1 ausscripts/restore.sh). -
Restore:
bash scripts/restore.sh(interaktiv, wählt Backup aus Liste, fragtj/Nab; startet danach den Server wieder und ruft nach 45 s den Healthcheck auf, 1:1 ausscripts/restore.sh).
Details: Backup-und-Restore.
-
Aus falschem Verzeichnis aufgerufen:
make-Targets und Skripte gehen von Pfaden relativ zum Repo-Root aus. Wercd scripts && bash healthcheck.shstartet, verliert u. a. denREPO_ROOT-Pfad auslib/common.sh(Heuristik). -
Exec-Bits fehlen nach
git clone: Symptom istPermission denieddirekt auf dem Skript. Fix einmalig:chmod +x scripts/*.sh scripts/lib/*.sh(Heuristik; Symptom im Repo nicht dokumentiert). -
.envfehlt: Skripte brechen mit „.env fehlt. Erst: cp .env.example .env und Werte setzen." ab (1:1 auslib/common.sh); kein Fallback auf.env.example. -
touch .planned-stopvergessen: Watchdog startet den bewusst gestoppten Server sofort wieder hoch (1:1 ausscripts/monitor.sh; siehe Monitoring-und-Alerts). -
sudo systemctl stopohne Vorlauf: Hart-Stop schreibt das Journal mit unsauberem Shutdown — sauberer Pfad ist/quitals Admin im Chat, dann Stop (Community-Quelle: pzwiki-Doku, Hinweis im Storage-Guide). -
make updateohne Timer-Aktivierung: Funktioniert ad hoc, aber wer die Automatik will, brauchtzomboid-update.timeraktiv (siehe systemd-Referenz).
Weiter: Makefile-Referenz · Monitoring-und-Alerts · Backup-und-Restore · Admin-Befehle · systemd-Referenz
Labels: Community-Quelle = extern belegt (Herkunft in Klammern, z. B. pzwiki, Steam-Diskussionen, GCP-Preisliste) · Repo-Default = steht genau so im Repo (Template, Skript oder .env.example) · Heuristik = begründete Empfehlung dieses Projekts, nicht extern verifiziert.
The Indie Stone (TIS) publiziert keine offiziellen Storage-/IOPS-/Performance-Specs — Zahlen in diesem Wiki nie als TIS-Anforderung lesen.
Inhalte zielen auf den B42-Stable-Branch: seit B42.20 der Default-Zweig in Steam, kein -beta-Opt-in nötig (Community-Quelle).
Details zu Labels, Quellen und Redaktionsregeln: Konventionen-und-Quellen.
Einstieg
Referenz
- Makefile-Referenz
- Cheatsheet-Tagesbetrieb
- ENV-Variablen
- Server-Konfiguration
- Admin-Befehle
- Mods-Referenz
- Spawn-System
- Skripte-Referenz
- systemd-Referenz
- Ports-und-Netzwerk
- SteamCMD-Referenz
Betrieb
- Wartung-und-Automatik
- Backup-und-Restore
- Updates-und-Rollback
- Monitoring-und-Alerts
- Sicherheit-und-Hardening
- Docker-Betrieb
- GCP-Failover
Tiefenwissen
- Modding-Workflow
- Performance-Guide
- Storage-und-Map-Streaming
- Hardware-Empfehlungen
- Troubleshooting
- Runbook-Raven-Creek
Meta