-
Notifications
You must be signed in to change notification settings - Fork 0
systemd Referenz
← Home · Zurück: Skripte-Referenz
Das Repo betreibt den Server unter Linux als systemd-Service und hängt
Backup und Update an systemd-Timer; der Crash-Watchdog läuft per Cron.
Alle Unit-Dateien liegen in systemd/ im Repo und werden vor der
Installation per sed-Templating auf die eigenen Werte gebracht.
| Unit | Typ | Zweck |
|---|---|---|
zomboid.service |
service (simple) | Der Dedicated Server selbst |
zomboid-backup.service |
service (oneshot) | Führt backup.sh daily aus |
zomboid-backup.timer |
timer | Triggert das Backup täglich 04:00 |
zomboid-update.service |
service (oneshot) | Führt update.sh aus |
zomboid-update.timer |
timer | Triggert das Update wöchentlich (templated) |
Alle Direktiven und Zeitwerte: Repo-Default (1:1 aus den Unit-Dateien).
Komplette relevante Unit (1:1, Platzhalter noch unersetzt):
[Unit]
Description=Project Zomboid Dedicated Server (ProjectZomboiD)
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=__PZ_USER__
EnvironmentFile=-__REPO__/.env
WorkingDirectory=__PZ_SERVER_DIR__
ExecStart=__PZ_SERVER_DIR__/start-server.sh -servername ${SERVER_NAME} -Xmx${RAM_XMX}
Restart=always
RestartSec=30
TimeoutStopSec=120
LimitNOFILE=65535
[Install]
WantedBy=multi-user.targetDie Direktiven erklärt:
| Direktive | Bedeutung |
|---|---|
After=/Wants=network-online.target |
Erst starten, wenn Netzwerk da ist |
User=__PZ_USER__ |
Läuft als dedizierter Nutzer (aus .env: PZ_USER) |
EnvironmentFile=-__REPO__/.env |
Liest .env ein; das führende - = Datei darf fehlen |
WorkingDirectory |
Server-Installationsverzeichnis (PZ_SERVER_DIR) |
ExecStart |
start-server.sh -servername ${SERVER_NAME} -Xmx${RAM_XMX} — Servername und Heap kommen direkt aus .env (Repo-Default) |
Restart=always + RestartSec=30
|
Neustart nach Absturz, 30 s Verzögerung |
TimeoutStopSec=120 |
Gibt dem Server bis zu 120 s für sauberes Stoppen |
LimitNOFILE=65535 |
Erhöht das Datei-Handle-Limit — wichtig für viele Mods/Spieler |
WantedBy=multi-user.target |
Autostart nach Boot, sobald enable gesetzt ist |
Zu -Xmx: .env setzt RAM_XMX=12G als Default (Repo-Default); zur
Heap-Dimensionierung siehe ENV-Variablen und Performance-Guide.
Der Ordner systemd/ enthält bewusst Platzhalter — __PZ_USER__, __REPO__,
__PZ_SERVER_DIR__, __UPDATE_DAY__, __UPDATE_TIME__ — die vor dem
Kopieren mit den Werten aus .env ersetzt werden (systemd/README.md). Der
dokumentierte Weg (1:1 aus systemd/README.md):
export REPO=$(pwd)
sed -e "s|__PZ_USER__|$PZ_USER|" -e "s|__REPO__|$REPO|" \
-e "s|__PZ_SERVER_DIR__|$PZ_SERVER_DIR|" systemd/zomboid.service | sudo tee /etc/systemd/system/zomboid.service
sudo systemctl daemon-reload
sudo systemctl enable --now zomboid zomboid-update.timer zomboid-backup.timerHinweis (ehrlich aus den Dateien ablesbar): Der sed-Aufruf im README
behandelt nur zomboid.service; auch zomboid-backup.service,
zomboid-update.service (beide __REPO__) und zomboid-update.timer
(__UPDATE_DAY__/__UPDATE_TIME__) tragen Platzhalter und müssen
analog ersetzt werden, bevor enable --now beide Timer aktiviert
(Repo-Verhalten — sonst starten die Timer mit wörtlichen Platzhaltern).
[Timer]
OnCalendar=*-*-* 04:00
Persistent=true-
OnCalendar=*-*-* 04:00: täglich um 04:00 Uhr (Repo-Default) -
Persistent=true: verpasste Läufe (Host war aus) werden beim nächsten Boot nachgeholt - Dazugehöriger oneshot-Service
zomboid-backup.service:ExecStart=__REPO__/scripts/backup.sh daily(1:1) — Details Backup-und-Restore
[Timer]
OnCalendar=__UPDATE_DAY__ __UPDATE_TIME__
Persistent=true- Beide Felder sind Platzhalter, gefüllt aus
.env:UPDATE_DAY=Tue,UPDATE_TIME=03:00(Repo-Default aus .env.example) - Dazugehöriger oneshot-Service
zomboid-update.service:ExecStart=__REPO__/scripts/update.sh(1:1) — der komplette Zyklus inklusive Auto-Rollback läuft also auch automatisch, siehe Updates-und-Rollback - Ebenfalls
Persistent=true(Repo-Default)
systemd prüft nur „läuft der Prozess". Der Crash-Watchdog obendrauf läuft per Cron, minütlich (Eintrag 1:1 aus systemd/README.md):
* * * * * /pfad/zum/repo/scripts/monitor.shmonitor.sh (Details: Skripte-Referenz):
-
systemctl is-active zomboid→ aktiv: nichts tun - Lockfile
${REPO_ROOT}/.planned-stopvorhanden → nichts tun (geplanter Stop, z. B. während Update/Wartung) - Sonst:
sudo systemctl restart zomboid, 45 s warten, Healthcheck, Discord-Alarm — bei Erfolg wie bei Misserfolg
.planned-stop verhindert den Fehl-Neustart: Legt man vor einem
geplanten Stop touch .planned-stop im Repo-Root an, greift der Watchdog
nicht ein, während der Server bewusst unten ist; danach Datei wieder
löschen (docs/05-wartung.md).
make stop # = sudo systemctl stop zomboid (Makefile, 1:1)
sudo systemctl stop zomboidsystemd sendet SIGTERM an den Java-Prozess; TimeoutStopSec=120 gibt ihm
bis zu 2 Minuten, sauber zu speichern und sich zu beenden (Repo-Default).
Für Wartungsstopps vorher .planned-stop anlegen, damit der minütliche
Watchdog den Server nicht sofort wieder hochzieht.
Community-Caveat (Community-Quelle: pzwiki-Diskussion): Der direkte
Betrieb des PZ-Servers unter systemd ist community-seitig umstritten —
im Fokus steht die SIGTERM-„Unclean shutdown"-Debatte (erzwungene
Beendigung ohne sauberes /quit im Spiel). Dieses Repo entscheidet sich
trotzdem für systemd (Repo-Default): Restart=always gibt Absturzsicherheit,
und die Stop-Pfade laufen über die Skripte bzw. start-server.sh mit
ausreichend Timeout. Wer maximale Vorsicht will, kann vor make stop
per RCON /quit senden (Heuristik; RCON ist in .env aktivierbar —
ankündigen via announce.sh ist im Repo bereits eingebaut).
Autostart nach Reboot setzt systemctl enable (im Installationsweg
oben enthalten). Prüfen:
systemctl is-enabled zomboid zomboid-backup.timer zomboid-update.timerTimer-Status kontrollieren (nächste Termine, letzter Lauf):
systemctl list-timers zomboid-backup.timer zomboid-update.timerLogs des Servers:
sudo journalctl -u zomboid -f # Live (identisch zu: make logs)
sudo journalctl -u zomboid --since "5 min ago"
sudo journalctl -u zomboid-backup.service -n 50 # was der Backup-Runner tatDer Healthcheck des Repos greift ebenfalls auf journalctl -u zomboid
zu (letzte 5 Minuten, Muster OutOfMemory|Exception in thread|FATAL —
Repo-Default) — Details Monitoring-und-Alerts und Troubleshooting.
Weiter: Wartung-und-Automatik (der Gesamt-Rhythmus) · Backup-und-Restore · Zurück: Skripte-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