> Die vollständige Liste der Artikel steht in [llms.txt](https://docs.f3cloud.com/llms.txt). Jede Seite gibt es auch als Markdown, dazu einfach .md an die Adresse anhängen. Diese Seite als Markdown: [https://docs.f3cloud.com/de/games/project-zomboid-server.md](https://docs.f3cloud.com/de/games/project-zomboid-server.md).

# Project-Zomboid-Server auf einem VPS – Installation mit SteamCMD, Autostart und Backups

So erstellen Sie einen Project-Zomboid-Server auf einem VPS. Installation über SteamCMD, Begrenzung des Java-Speichers, erster Start und Administratorpasswort, Einstellungen in servertest.ini, Öffnen der Ports 16261 und 16262 über UDP, Autostart über systemd mit Speichern der Welt beim Stoppen, Update und Backups. Getestet unter Debian 12 mit Project Zomboid Build 42.21.

Ein eigener Project-Zomboid-Server auf einem VPS läuft rund um die Uhr, und Ihre Freunde können jederzeit in die gemeinsame Welt einsteigen, ohne darauf zu warten, dass jemand seinen Computer einschaltet. Sie entscheiden selbst, wie viele Spieler mitspielen, ob PVP aktiviert ist und wer beitreten darf. In diesem Artikel installieren wir den Dedicated Server über SteamCMD, begrenzen seinen Arbeitsspeicher, öffnen die nötigen Ports und richten den Autostart mit sicherem Beenden sowie Backups der Welt ein. Alle Schritte haben wir auf einem Testserver mit Debian 12 nachvollzogen. Zum Zeitpunkt des Tests war die aktuelle Version des Spiels **Build 42.21**.

***

## Wie der Project-Zomboid-Server aufgebaut ist

Der Project-Zomboid-Server ist ein eigenständiges kostenloses Programm, das Valve über Steam unter der Anwendungsnummer **380870** verteilt. Für die Installation brauchen Sie weder ein Steam-Konto noch das gekaufte Spiel, denn der Download erfolgt anonym, und zwar über den Konsolen-Client **SteamCMD**. Das Spiel ist in Java geschrieben, und der Server bringt sein eigenes Java 25 im Ordner `jre64` mit, deshalb müssen Sie Java nicht separat installieren. Programm und Daten liegen dabei an verschiedenen Orten. Die Spieldateien befinden sich im Serverordner, während die Welt, die Spielerkonten, die Einstellungen und die Protokolle im Ordner `Zomboid` im Home-Verzeichnis des Benutzers gespeichert werden. Dadurch ersetzt ein Update über SteamCMD nur das Spiel selbst und lässt Ihre Welt unangetastet.

Die Spieler verbinden sich über das Protokoll UDP. Beim Start schreibt der Server selbst ins Protokoll, dass er den Port 16261 für Steam-Verbindungen und den Port 16262 für RakNet-Verbindungen abhört, und empfiehlt den Clients, den Port 16261 zu verwenden. Wir haben beide Ports von außen geprüft. Auf 16261 antwortet der Server auf Steam-Anfragen nach seinem Namen und der Spielerzahl, auf 16262 antwortet er auf den RakNet-Dienstping, deshalb müssen in der Firewall beide Ports geöffnet werden. Sind die Ports geschlossen, gehen die UDP-Pakete einfach verloren, und der Server schweigt, weil nichts bei ihm ankommt. Genau so sah unser Server bei der Prüfung von außen aus, solange in UFW die Regel fehlte.

Die wichtigste Ressource des Servers ist der Arbeitsspeicher. In der Datei `ProjectZomboid64.json` steht das Speicherlimit von Java standardmäßig auf **-Xmx8g**, also 8 GB, und das ist für einen kleinen VPS zu viel. Wir setzen 3 GB. Der Prozess belegt dabei mehr als das angegebene Limit, weil zum Heap noch der Speicher hinzukommt, den Java selbst braucht. Auf unserem Server belegte der Prozess mit `-Xmx3g` etwa 4 GB und mit `-Xmx2g` etwa 2,9 GB, also das Limit plus rund 0,9 GB. Der Server verwendet den Garbage Collector ZGC (Parameter `-XX:+UseZGC` in derselben Datei), und belegter Speicher wird im Leerlauf nicht freigegeben. Sechs Minuten nach dem Start ohne einen einzigen Spieler belegte der Prozess weiterhin dieselben 3,9 GB, planen Sie den Speicher also großzügig.

> **Build 42 und Build 41.**
>
> Der Branch `public` in SteamCMD, den Sie standardmäßig erhalten, enthält derzeit Build 42. In unserem Startprotokoll steht `version=42.21.0`, und in den offiziellen Steam-Ankündigungen wird Version 42.21 als stabil bezeichnet. Außerdem gibt es in SteamCMD die Branches `unstable` zum Testen, `legacy41` mit Build 41.78.21 und `42.19` mit Build 42.19.2. Den Branch wählen Sie mit dem Parameter `-beta`, zum Beispiel `+app_update 380870 -beta legacy41 validate`. Wir haben geprüft, dass SteamCMD diesen Parameter akzeptiert und den Download von Build 41 beginnt, er umfasst etwa 5 GB. Die Version des Clients bei den Spielern muss mit der Version des Servers übereinstimmen. Das Spiel auf einem Build-41-Server haben wir nicht gestartet und den Wechsel zwischen den Branches nicht geprüft, erstellen Sie deshalb vor einem Wechsel eine Kopie der Welt.

***

## Was Sie brauchen

* **Einen Server** mit Debian 12 und **mindestens 6 GB Arbeitsspeicher**, zum Beispiel den Tarif **DE-RZ9-3**. Mit `-Xmx3g` belegt der Prozess etwa 4 GB, und auf der Festplatte werden noch etwa 7 GB benötigt. Wenn Sie noch keinen Server haben, bestellen Sie ihn nach der [Anleitung](https://docs.f3cloud.com/de/client-area/order-vps.md). Auf dem Tarif **DE-RZ9-2** mit 4 GB startet der Server mit `-Xmx2g`, aber die Reserve ist klein, und den Betrieb unter der Last von Spielern haben wir nicht geprüft.
* **Eine SSH-Verbindung**, zum Beispiel über [Termius](https://docs.f3cloud.com/de/vps/termius-connection.md). Die Befehle werden als `root` ausgeführt, sofern nichts anderes angegeben ist.
* **Das Spiel Project Zomboid** bei jedem Spieler, in derselben Version wie der Server.

> **Was wir geprüft haben und was nicht.**
>
> Wir haben den Spielclient nicht gestartet und sind nicht als Spieler auf den Server gegangen. Geprüft haben wir etwas anderes. Der Server startet, hört die Ports 16261 und 16262 über UDP ab und antwortet von einem anderen Computer aus auf Steam- und RakNet-Anfragen. Beenden, Neustart, Update und Backups funktionieren. Die Last durch Spieler, Mods und den Betrieb in der Serverliste des Spiels haben wir nicht geprüft.

***

## Schritt 1. Installieren Sie die Bibliotheken und legen Sie einen Benutzer an

SteamCMD ist ein 32-Bit-Programm, und auf einem 64-Bit-Debian braucht es zwei Bibliotheken. Installieren Sie gleich auch `screen`, das brauchen wir für die Konsole des Servers.

```bash
apt update
apt install -y screen curl ca-certificates lib32gcc-s1 lib32stdc++6
```

Den Server als `root` zu starten ist unsicher, deshalb legen wir für ihn einen eigenen Benutzer `zomboid` mit dem Home-Verzeichnis `/opt/zomboid` an. Mehr über Benutzer erfahren Sie im Artikel über [Linux-Benutzer](https://docs.f3cloud.com/de/linux/linux-users.md).

```bash
useradd -r -m -d /opt/zomboid -s /bin/bash zomboid
```

***

## Schritt 2. Installieren Sie SteamCMD

Melden Sie sich als Benutzer `zomboid` an und laden Sie SteamCMD vom Server von Valve herunter. Die Befehle der Schritte 2 bis 5 werden unter diesem Benutzer ausgeführt.

```bash
su - zomboid
mkdir ~/steamcmd && cd ~/steamcmd
curl -fsSL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar zxf -
```

Das ist ein kleines Ladeprogramm, das vollständige Programm wird beim ersten Start heruntergeladen.

***

## Schritt 3. Laden Sie den Server herunter

Der folgende Befehl meldet sich anonym bei Steam an und lädt die Anwendung 380870 in den Ordner `/opt/zomboid/server` herunter. Beim ersten Start aktualisiert sich SteamCMD zuerst selbst, etwa 41 MB, und beginnt dann mit dem Download des Servers.

```bash
./steamcmd.sh +force_install_dir /opt/zomboid/server +login anonymous +app_update 380870 validate +quit
```

Auf unserem Server wurden etwa 2 GB heruntergeladen, und auf der Festplatte belegte der Server etwa 7 GB. Die Installation dauerte etwa drei Minuten. Am Ende schreibt SteamCMD **Success! App '380870' fully installed.**

Im Serverordner liegen nun das Startskript `start-server.sh`, das mitgelieferte Java in `jre64` und die Datei `ProjectZomboid64.json` mit den Speichereinstellungen.

***

## Schritt 4. Begrenzen Sie den Arbeitsspeicher

Ersetzen Sie in `ProjectZomboid64.json` das Limit von 8 GB durch 3 GB. Wenn Sie einen Tarif mit 4 GB haben, setzen Sie `-Xmx2g`.

```bash
sed -i 's/-Xmx8g/-Xmx3g/' ~/server/ProjectZomboid64.json
grep Xmx ~/server/ProjectZomboid64.json
```

In der Ausgabe muss die Zeile `"-Xmx3g",` stehen. Die übrigen Parameter in der Datei sollten Sie besser nicht anfassen.

> **Die Dateiprüfung setzt diesen Parameter zurück.**
>
> Wenn Sie SteamCMD mit dem Parameter `validate` starten, setzt es `ProjectZomboid64.json` auf den ursprünglichen Zustand zurück, und das Limit steht wieder auf 8 GB. Das haben wir auf dem Testserver geprüft. Wie Sie den Server aktualisieren, ohne das Limit zu verlieren, zeigt der Abschnitt zum Update weiter unten.

***

## Schritt 5. Starten Sie den Server zum ersten Mal

Den ersten Start müssen Sie von Hand ausführen, weil der Server nach dem Administratorpasswort fragt.

```bash
cd ~/server
./start-server.sh
```

Zuerst gibt der Server viele Zeilen über das Laden des Spiels aus. Danach erscheinen die Zeilen **Enter new administrator password** und **Confirm the password**. Geben Sie ein ausgedachtes Passwort ein und drücken Sie <kbd>Enter</kbd>, wiederholen Sie es dann zur Bestätigung. Danach meldet der Server **Administrator account 'admin' created.** So entsteht das Konto `admin`, mit dem Sie sich im Spiel als Administrator anmelden.

<figure><img src="https://docs.f3cloud.com/img/zomboid-admin-password.png" alt="Erster Start des Project-Zomboid-Servers, Abfrage des Administratorpassworts und die Meldung Administrator account 'admin' created"><figcaption><p>Das Administratorpasswort verlangt der Server beim ersten Start, die Passwörter sind auf dem Bildschirm verdeckt</p></figcaption></figure>

> **Das Passwort ist beim Eingeben sichtbar.**
>
> In unserem Terminal wurde das eingegebene Passwort im Klartext auf dem Bildschirm angezeigt. Achten Sie darauf, dass niemand hinter Ihnen steht, und machen Sie keine Screenshots von diesem Fenster. Am besten erzeugen Sie das Passwort in einem Passwortmanager und fügen es ein. Verwenden Sie den Parameter `-adminpassword` nicht im Startskript, denn dann bleibt das Passwort im Klartext in der Datei stehen.

Als Nächstes erstellt der Server die Welt. Nach der Eingabe des Passworts dauerte das bei uns etwa 50 Sekunden. Sobald im Protokoll die Zeile **SERVER STARTED** erscheint, ist der Server bereit.

<figure><img src="https://docs.f3cloud.com/img/zomboid-server-started.png" alt="Project-Zomboid-Server gestartet, Meldung SERVER STARTED und Zeile zu den Ports 16261 und 16262"><figcaption><p>Der Server hört die Ports 16261 und 16262 ab</p></figcaption></figure>

Beenden Sie den Server mit dem Befehl `quit`, den Sie in diesem Fenster eingeben. Er speichert die Welt und beendet den Server, bei uns dauerte das etwa 10 Sekunden. Kehren Sie nach dem Beenden zu `root` zurück. Danach wird der Server automatisch gestartet.

```bash
exit
```

Einstellungen und Welt wurden im Ordner `/opt/zomboid/Zomboid` angelegt. Hier liegt das Wichtigste.

* `Server/servertest.ini` mit den Haupteinstellungen des Servers.
* `Server/servertest_SandboxVars.lua` mit den Regeln der Welt, zum Beispiel der Zahl der Zombies und der Geschwindigkeit des Tag-Nacht-Wechsels.
* `Saves/Multiplayer/servertest` mit der Welt selbst.
* `db/servertest.db` mit den Spielerkonten.
* `Logs` mit den Protokollen des Servers.

Der Name `servertest` ist der Standardname des Servers, nach ihm sind alle diese Dateien benannt.

***

## Schritt 6. Konfigurieren Sie den Server

Öffnen Sie die Einstellungsdatei. Ändern Sie sie bei gestopptem Server, weil der Server diese Datei beim Start selbst neu schreibt.

```bash
nano /opt/zomboid/Zomboid/Server/servertest.ini
```

Neben jedem Parameter steht in der Datei ein Kommentar auf Englisch. Das Wichtigste haben wir in einer Tabelle zusammengefasst, die Standardwerte stammen aus der erzeugten Datei.

| Parameter | Standardwert | Bedeutung |
| --- | --- | --- |
| `PublicName` | My PZ Server | Name des Servers in den Listen des Spiels und in Steam |
| `Password` | leer | Passwort, das man kennen muss, um auf den Server zu gelangen |
| `MaxPlayers` | 32 | Wie viele Spieler gleichzeitig auf dem Server sein können, Administratoren werden nicht mitgezählt |
| `PVP` | true | Spieler können sich gegenseitig verletzen und töten |
| `Open` | true | Ein Spieler kann ohne vorher angelegtes Konto beitreten, das Konto wird beim ersten Beitritt erstellt |
| `Public` | false | Server in der Serverliste des Spiels anzeigen |
| `PauseEmpty` | true | Die Spielzeit steht still, solange niemand auf dem Server ist |
| `SaveWorldEveryMinutes` | 0 | Wie oft die Welt gespeichert wird. Bei 0 wird die Karte hauptsächlich dann gespeichert, wenn Spieler den geladenen Bereich verlassen |
| `UPnP` | true | Versuch, den Router automatisch zu konfigurieren. Auf einem VPS gibt es keinen Router, setzen Sie deshalb false |

Für einen Server mit Freunden haben wir einige Werte geändert. Diese Zeilen haben wir auf dem Testserver geprüft.

```ini
PublicName=Friends Server
Password=ihr_passwort
MaxPlayers=8
PVP=false
UPnP=false
SaveWorldEveryMinutes=15
```

Nach dem Start des Servers haben wir geprüft, dass die Einstellungen übernommen wurden. Der Befehl `showoptions` in der Konsole zeigte die neuen Werte, und eine Steam-Anfrage von einem anderen Computer lieferte den Namen des Servers, die Platzzahl 8 und das Kennzeichen, dass ein Passwort nötig ist.

> **Serverpasswort und geschlossene Liste.**
>
> Für eine Runde Freunde genügt es, `Password` zu setzen, dieses Passwort teilen Sie den Freunden einfach mit. Wenn Sie strenge Kontrolle brauchen, setzen Sie `Open=false`. Dann legen Sie die Spielerkonten selbst mit dem Befehl `adduser Name Passwort` in der Konsole des Servers an. Diesen Befehl haben wir geprüft, der Server antwortete, dass der Benutzer erstellt wurde.

***

## Schritt 7. Öffnen Sie die Ports 16261 und 16262

Öffnen Sie beide Ports in der Firewall UFW. Die Ports werden ausdrücklich für UDP benötigt.

```bash
ufw allow 16261:16262/udp
```

Mehr zur Firewall erfahren Sie im Artikel über [UFW](https://docs.f3cloud.com/de/vps/security/firewall.md).

Den Server müssen Sie aus dem Internet prüfen, also von einem anderen Computer aus. Dafür haben wir ein kleines Python-3-Skript geschrieben, das dem Server die standardmäßige Steam-Anfrage nach Serverinformationen (A2S_INFO) schickt. Speichern Sie es auf Ihrem Computer in der Datei `pz-check.py`.

```python
import socket, sys

host, port = sys.argv[1], 16261
req = b"\xff\xff\xff\xffTSource Engine Query\x00"
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.settimeout(3)
try:
    s.sendto(req, (host, port))
    data, _ = s.recvfrom(4096)
    if data[4:5] == b"A":  # der Server bittet darum, die Anfrage mit einem Prüfcode zu wiederholen
        s.sendto(req + data[5:9], (host, port))
        data, _ = s.recvfrom(4096)
    print("Server antwortet, Name:", data[6:data.index(0, 6)].decode())
except socket.timeout:
    print("Keine Antwort, Port geschlossen oder Server nicht gestartet")
```

Führen Sie es aus und geben Sie dabei die IP-Adresse des VPS an. Wir haben das Skript zweimal geprüft, vor und nach der Regel in UFW.

```bash
python3 pz-check.py IP-des-Servers
```

<figure><img src="https://docs.f3cloud.com/img/zomboid-udp-check-de.png" alt="Prüfung des Ports 16261 über UDP, zuerst keine Antwort, nach der Regel in UFW antwortet der Server und nennt seinen Namen"><figcaption><p>Solange der Port geschlossen ist, kommt keine Antwort. Nach der Regel in UFW nennt der Server seinen Namen</p></figcaption></figure>

Wenn Sie den Namen des Servers sehen, ist der Port 16261 aus dem Internet erreichbar. Den Port 16262 haben wir separat mit dem RakNet-Dienstping geprüft, er hat ebenfalls geantwortet.

***

## Schritt 8. Richten Sie den Autostart ein

Damit der Server im Hintergrund läuft, zusammen mit dem VPS startet und nach einem Absturz wieder hochfährt, richten wir ihn als systemd-Dienst ein. Wie Dienste aufgebaut sind, erfahren Sie ausführlich im Artikel über [systemd](https://docs.f3cloud.com/de/linux/systemd-services.md). Die Konsole des Servers starten wir, wie schon im Artikel über den [Minecraft-Server](https://docs.f3cloud.com/de/games/minecraft-server.md), innerhalb von `screen`. Über sie erhält der Server Befehle, darunter auch den Befehl zum Speichern und Beenden.

Erstellen Sie zuerst das Stoppskript. Es sendet den Befehl `quit` an die Konsole, damit der Server die Welt speichert, und wartet, bis der Server beendet ist.

```bash
nano /opt/zomboid/stop.sh
```

```bash
#!/bin/sh
# Sendet den Befehl quit an die Konsole des Servers und wartet, bis der Server die Welt gespeichert hat und beendet ist
screen -p 0 -S zomboid -X stuff "quit$(printf '\r')"
while kill -0 "$MAINPID" 2>/dev/null; do sleep 1; done
```

Machen Sie das Skript ausführbar und erstellen Sie den Dienst.

```bash
chmod +x /opt/zomboid/stop.sh
chown zomboid:zomboid /opt/zomboid/stop.sh
nano /etc/systemd/system/zomboid.service
```

```ini
[Unit]
Description=Project Zomboid server
After=network-online.target
Wants=network-online.target

[Service]
User=zomboid
WorkingDirectory=/opt/zomboid/server
ExecStart=/usr/bin/screen -DmS zomboid /opt/zomboid/server/start-server.sh
ExecStop=/opt/zomboid/stop.sh
Restart=always
RestartSec=10
TimeoutStopSec=120

[Install]
WantedBy=multi-user.target
```

Aktivieren Sie den Autostart und starten Sie den Server.

```bash
systemctl daemon-reload
systemctl enable --now zomboid
systemctl status zomboid
```

<figure><img src="https://docs.f3cloud.com/img/zomboid-systemd-status.png" alt="systemctl status zomboid, der Dienst ist active (running), Prozesse screen und ProjectZomboid64 sowie die UDP-Ports 16261 und 16262"><figcaption><p>Der Dienst läuft, der Server hört beide Ports ab</p></figcaption></figure>

Nach dem Start des Dienstes lädt der Server etwa 40 Sekunden und beginnt dann, auf Anfragen zu antworten. Verwalten Sie ihn jetzt über systemd.

* `systemctl stop zomboid` speichert die Welt und schaltet den Server aus.
* `systemctl restart zomboid` startet den Server neu.
* `systemctl start zomboid` schaltet den Server ein.

Wir haben geprüft, wie sich der Dienst in verschiedenen Situationen verhält.

* Das Beenden mit dem Befehl `systemctl stop zomboid` dauerte etwa 10 Sekunden, und im Protokoll des Servers erschienen Einträge über den Befehl `quit` und über das Speichern der Welt.
* Als wir Java zwangsweise beendet haben, hat systemd den Server nach 10 Sekunden neu hochgefahren. Das Skript `start-server.sh` endet auch nach einem solchen Absturz mit dem Code 0, deshalb ist gerade `Restart=always` nötig.
* Der Befehl `quit`, direkt in der Konsole eingegeben, führt ebenfalls zu einem Neustart und nicht zum Ausschalten. Um den Server auszuschalten, verwenden Sie `systemctl stop zomboid`.

Spielmeldungen landen nicht in `journalctl`, weil der Server sie in die Konsole innerhalb von `screen` schreibt. Die Protokolle liegen in `/opt/zomboid/Zomboid/Logs`, und der letzte Start ist in der Datei `/opt/zomboid/Zomboid/server-console.txt` festgehalten. Mehr über Protokolle erfahren Sie im Artikel über [Linux-Logs](https://docs.f3cloud.com/de/linux/linux-logs.md).

***

## Schritt 9. Konsole des Servers und Verbindung der Spieler

Um die Konsole des Servers zu öffnen, verbinden Sie sich mit der `screen`-Sitzung.

```bash
su - zomboid -c "screen -r zomboid"
```

Die Konsole verlassen und den Server weiterlaufen lassen können Sie mit der Tastenkombination <kbd>Ctrl</kbd> + <kbd>A</kbd> und danach <kbd>D</kbd>. Mehr zur Arbeit mit `screen` erfahren Sie in einem [eigenen Artikel](https://docs.f3cloud.com/de/linux/screen-linux-tool.md). Eine Liste aller Befehle gibt `help` aus. Das sind die Befehle, die wir geprüft haben.

* `players` zeigt die verbundenen Spieler an.
* `save` speichert die Welt sofort.
* `servermsg "Text"` sendet eine Nachricht an alle Spieler.
* `adduser Name Passwort` legt ein Spielerkonto an.
* `quit` speichert die Welt und stoppt den Server, danach startet der Dienst ihn wieder.

Die Spieler müssen im Spiel die IP-Adresse des VPS, den Port **16261**, das Serverpasswort, falls Sie eines festgelegt haben, und anschließend Namen und Passwort ihres Charakters eingeben. Auf einem offenen Server mit `Open=true` wird das Konto beim ersten Beitritt erstellt. Statt der IP-Adresse ist eine Domain praktisch, wie das geht, beschreibt der Artikel über die [Verknüpfung einer Domain](https://docs.f3cloud.com/de/vps/domain-to-vps.md). Um sich als Administrator anzumelden, verwenden Sie den Namen `admin` und das Passwort aus Schritt 5.

***

## Update des Servers

Wenn eine neue Version des Spiels erscheint, aktualisieren sich die Clients über Steam von selbst, und die Version des Servers muss mit ihr übereinstimmen. Im Update 42.21 haben die Entwickler einen Hinweis für Spieler hinzugefügt, die versuchen, einen Server mit einer anderen Version zu betreten. Der Server wird separat aktualisiert. Wir haben ein Skript zusammengestellt, das den Server stoppt, aktualisiert, das Speicherlimit wiederherstellt und ihn erneut startet.

```bash
nano /usr/local/bin/zomboid-update.sh
```

```bash
#!/bin/sh
# Stoppt den Server, aktualisiert ihn über SteamCMD, stellt das Speicherlimit wieder her und startet ihn erneut
systemctl stop zomboid
su - zomboid -c "~/steamcmd/steamcmd.sh +force_install_dir /opt/zomboid/server +login anonymous +app_update 380870 +quit"
su - zomboid -c "sed -i 's/-Xmx[0-9]*[gGmM]/-Xmx3g/' /opt/zomboid/server/ProjectZomboid64.json"
systemctl start zomboid
```

Wenn Sie ein anderes Speicherlimit gewählt haben, ersetzen Sie `3g` im Skript. Machen Sie das Skript ausführbar und starten Sie es, wenn Sie aktualisieren möchten.

```bash
chmod +x /usr/local/bin/zomboid-update.sh
zomboid-update.sh
```

Wenn es keine Updates gibt, schreibt SteamCMD **Success! App '380870' already up to date.** Bei uns lief das ganze Skript in 14 Sekunden durch. Der Parameter `validate` fehlt im Skript absichtlich. Wir haben geprüft, dass ein normales Update die geänderte Datei `ProjectZomboid64.json` nicht anfasst, während die Dateiprüfung mit `validate` darin wieder 8 GB einsetzt.

<figure><img src="https://docs.f3cloud.com/img/zomboid-steamcmd-validate.png" alt="SteamCMD hat mit dem Parameter validate 7 GB an Dateien geprüft und 359 Byte heruntergeladen, also die Datei ProjectZomboid64.json ersetzt"><figcaption><p>Die Dateiprüfung dauerte etwa eine Minute und ersetzte eine kleine Datei mit den Speichereinstellungen</p></figcaption></figure>

`validate` ist nur zur Reparatur nötig, zum Beispiel wenn Spieldateien beschädigt wurden. Führen Sie danach erneut den Befehl aus Schritt 4 aus.

***

## Backups der Welt

Die Welt liegt in `/opt/zomboid/Zomboid/Saves` und die Spielerkonten in `/opt/zomboid/Zomboid/db`. Der Server legt beim Start und beim Versionswechsel selbst Kopien an und speichert sie in `/opt/zomboid/Zomboid/backups`, standardmäßig behält er fünf Kopien (Parameter `BackupsCount`). Sie liegen aber auf derselben Festplatte wie die Welt. Für mehr Sicherheit ergänzen wir ein eigenes Skript. Es speichert die Welt mit dem Befehl `save`, packt Welt, Spielerkonten und Einstellungen in ein Archiv im Ordner `/opt/zomboid/archives` und behält die 7 neuesten Archive. Der Server wird während des Kopierens nicht gestoppt.

```bash
nano /opt/zomboid/backup.sh
```

```bash
#!/bin/sh
# Speichert die Welt, archiviert sie zusammen mit den Einstellungen und behält die 7 neuesten Archive
cd /opt/zomboid || exit 1
screen -p 0 -S zomboid -X stuff "save$(printf '\r')"
sleep 10
mkdir -p archives
tar -czf "archives/zomboid-$(date +%F-%H%M).tar.gz" Zomboid/Saves Zomboid/db Zomboid/Server
ls -1t archives/zomboid-*.tar.gz | tail -n +8 | xargs -r rm --
```

Machen Sie das Skript ausführbar und tragen Sie es in den Zeitplan des Benutzers `zomboid` ein, zum Beispiel jede Nacht um 4:00 Uhr.

```bash
chmod +x /opt/zomboid/backup.sh
chown zomboid:zomboid /opt/zomboid/backup.sh
echo "0 4 * * * /opt/zomboid/backup.sh" | crontab -u zomboid -
```

Wir haben das Skript sowohl von Hand als auch nach Zeitplan geprüft, beide Male ist ein Archiv entstanden. In einer frischen Welt belegte das Archiv weniger als 1 MB, im echten Spiel wächst es mit der Welt. Mehr zum Zeitplan erfahren Sie im Artikel über [cron](https://docs.f3cloud.com/de/linux/cron-linux.md). Kopien auf demselben Server helfen nicht, wenn der Server selbst verloren geht. Laden Sie die Archive deshalb von Zeit zu Zeit auf Ihren Computer herunter oder schicken Sie sie an einen anderen Server, zum Beispiel mit dem Befehl [rsync](https://docs.f3cloud.com/de/linux/rsync-linux.md).

Um die Welt wiederherzustellen, stoppen Sie den Server, entpacken Sie das gewünschte Archiv über den Ordner `/opt/zomboid` und starten Sie den Server. Wir haben die Wiederherstellung geprüft, der Server ist danach gestartet.

```bash
systemctl stop zomboid
su - zomboid -c "tar -xzf /opt/zomboid/archives/ARCHIVNAME.tar.gz -C /opt/zomboid"
systemctl start zomboid
```

***

## Häufige Fragen

<details>

<summary>./steamcmd.sh: cannot execute: required file not found</summary>

Die vollständige Meldung lautet `./steamcmd.sh: line 85: /opt/zomboid/steamcmd/linux32/steamcmd: cannot execute: required file not found`. Es fehlen die 32-Bit-Bibliotheken. Diese Meldung haben wir erhalten, als wir `lib32gcc-s1` und `lib32stdc++6` entfernt hatten. Installieren Sie sie, wie in Schritt 1 beschrieben.

</details>

<details>

<summary>Der Dienst läuft, aber der Server antwortet nicht, in der Konsole steht Enter new administrator password</summary>

Beim ersten Start wartet der Server auf das Administratorpasswort, und im Dienst ist niemand da, der es eingibt. Wir haben das mit einem neuen Servernamen nachgestellt. Der Dienst blieb `active`, aber die Ports 16261 und 16262 wurden von niemandem abgehört, und die Prüfung von außen erhielt keine Antwort. Stoppen Sie den Dienst mit dem Befehl `systemctl stop zomboid`, führen Sie Schritt 5 von Hand aus, geben Sie das Passwort ein und warten Sie auf **SERVER STARTED**. Stoppen Sie dann den Server mit dem Befehl `quit` und starten Sie den Dienst erneut.

</details>

<details>

<summary>Rote ERROR beim Start, libjsig.so und Property Name not found</summary>

Im Startprotokoll haben wir zwei Gruppen von Zeilen mit Fehlern gesehen, und beide sind harmlos.

* **ERROR: ld.so: object 'libjsig.so' from LD_PRELOAD cannot be preloaded** erscheint beim Start. Am Ende der Zeile schreibt der Server, dass er diese Bibliothek übersprungen hat (`ignored`), und arbeitet weiter.
* **IsoPropertyType.lookupOrDefaultStr> Exception thrown** mit einem Text wie `Property Name not found: ladderW` und einem langen Stacktrace erscheint beim Erstellen einer neuen Welt mehrmals.

Wenn danach im Protokoll die Zeile **SERVER STARTED** steht, ist alles in Ordnung.

</details>

<details>

<summary>If the server hangs here, set UPnP=false</summary>

Das ist eine Zeile aus dem Startprotokoll, sie folgt direkt auf die Meldung **Router detection/configuration starting**. Solange der Parameter `UPnP` auf `true` steht, sucht der Server im Netzwerk nach einem Router, um Ports zu öffnen. Auf einem VPS gibt es keinen Router. Auf unserem Server wartete der Start etwa 12 Sekunden und schrieb **No UPnP-enabled Internet gateway found**, danach startete er. Setzen Sie `UPnP=false` in `servertest.ini`, und der Start wird um diese Zeit schneller.

</details>

<details>

<summary>Keine Antwort, Port geschlossen oder Server nicht gestartet</summary>

So antwortet unser Skript `pz-check.py`, wenn von einem anderen Computer keine Antwort kommt. Diese Meldung haben wir erhalten, solange es in UFW keine Regel für UDP gab. Prüfen Sie mit dem Befehl `systemctl status zomboid`, ob der Dienst läuft, mit dem Befehl `ufw status`, ob die Regel vorhanden ist, und mit dem Befehl `ss -ulpn | grep 1626`, ob die Ports abgehört werden. Öffnen Sie ausdrücklich **UDP**, eine Regel für TCP hilft nicht.

</details>

<details>

<summary>Killed process (ProjectZomboid6) im Kernel-Log</summary>

Der Server wurde plötzlich ohne Meldungen in der Konsole beendet. Das passiert, wenn der Prozess mehr Speicher belegt hat, als auf dem Server vorhanden oder dem Dienst zugeteilt ist, und der Kernel das System vor Speichermangel geschützt hat. Prüfen Sie das mit dem Befehl `journalctl -k | grep -i "killed process"`. Wir haben das nachgestellt, indem wir den Dienst bei einem Java-Limit von 3 GB auf 2 GB Speicher begrenzt haben, und der Kernel schrieb `Memory cgroup out of memory: Killed process … (ProjectZomboid6)`. Verringern Sie `-Xmx` in `ProjectZomboid64.json` oder nehmen Sie einen Tarif mit mehr Arbeitsspeicher.

</details>

<details>

<summary>Nach dem Update belegt der Server wieder 8 GB</summary>

Sie haben SteamCMD mit dem Parameter `validate` gestartet, und es hat `ProjectZomboid64.json` auf den ursprünglichen Zustand zurückgesetzt. Das haben wir erhalten, als wir die Dateien geprüft haben, SteamCMD 359 Byte heruntergeladen hat und in der Datei wieder `-Xmx8g` stand. Stellen Sie das Limit mit dem Befehl aus Schritt 4 wieder her und aktualisieren Sie den Server mit dem Skript aus dem Abschnitt zum Update.

</details>

***

## Unsere Ressourcen

**Telegram-Kanal:** [https://t.me/f3cloud_news](https://t.me/f3cloud_news)\
**Hosting-Website:** [https://f3cloud.com](https://f3cloud.com/de)
