# Minecraft Server automatisch neu starten lassen

### Voraussetzungen

Um einen Server unter Linux automatisch neu starten zu lassen, werden zwei Dateien benötigt:

- [Installierter Minecraft Server](http://dracobookstack.ddns.net/books/minecraft/page/minecraft-server-installieren-linux "Minecraft Server Installieren Linux")
- **(optional, aber empfohlen) [Tmux](http://dracobookstack.ddns.net/books/linux-server/page/tmux-terminal-multiplexer "Tmux: Terminal Multiplexer")**

### Erstellung der Dateien

#### 1. start.sh

Erstelle die Datei `start.sh` mit folgendem Inhalt:

```bash
#!/bin/sh
./startserver.sh
```

#### 2. startserver.sh

Erstelle die Datei `startserver.sh` mit folgendem Inhalt:

```bash
#!/bin/bash

JAR=server.jar
MAXRAM=1024M
MINRAM=1024M
TIME=20


while [ true ]; do
    java -Xmx$MAXRAM -Xms$MINRAM -jar $JAR nogui
    if [[ ! -d "exit_codes" ]]; then
        mkdir "exit_codes";
    fi
    if [[ ! -f "exit_codes/server_exit_codes.log" ]]; then
        touch "exit_codes/server_exit_codes.log";
    fi
    echo "[$(date +"%d.%m.%Y %T")] ExitCode: $?" >> exit_codes/server_exit_codes.log
    echo "----- Press enter to prevent the server from restarting in $TIME seconds -----";
    read -t $TIME input;
    if [ $? == 0 ]; then
        break;
    else
        echo "------------------- SERVER RESTARTS -------------------";
    fi
done
```

#### 3. Exit Codes Ordner erstellen

Erstelle den Ordner `exit_codes`, falls dieser noch nicht existiert, mit folgendem Befehl:

```bash
mkdir exit_codes
```

In diesem Ordner werden die Exit Codes gespeichert, die das Verhalten des Servers dokumentieren.

### Variablen Erklärung

- - **JAR**: Der Dateiname der Server-JAR-Datei (z.B. `server.jar`).
    - **MAXRAM**: Die maximale RAM-Zuweisung für den Server (z.B. `1024M` für 1GB RAM).
    - **MINRAM**: Die minimale RAM-Zuweisung für den Server (z.B. `1024M` für 1GB RAM).
    - **TIME**: Die Zeit in Sekunden, nach der der Server automatisch neu startet (z.B. `20` Sekunden).

### Dateien ausführbar machen

Stelle sicher, dass die Skripte ausführbar sind, indem du den folgenden Befehl im Verzeichnis ausführst, in dem sich die Dateien befinden:

```bash
chmod +x start.sh startserver.sh
```

### Starten des Servers

**Tmux-Sitzung (optional, aber empfohlen)**: Es wird empfohlen, eine Tmux-Sitzung zu öffnen, damit der Server auch dann weiterläuft, wenn du das Terminal schließt:

```bash
tmux
```

Um den Server mit dem automatischen Neustart-Skript zu starten, führe das Startskript aus:

```bash
sh ./start.sh
```

**(optional) Tmux-Sitzung trennen**: Wenn du Tmux verwendest, kannst du die Sitzung trennen, ohne den Server zu stoppen, indem du `Ctrl + B` und dann `D` drückst.

### Funktionsweise

1. **start.sh** führt das **startserver.sh** Skript aus.
2. **startserver.sh** startet den Server mit den angegebenen RAM-Einstellungen.
3. Bei einem Serverabsturz oder -stopp wird ein Exit-Code geloggt.
4. Das Skript wartet für die angegebene Zeit (`TIME` Sekunden) auf eine Benutzereingabe.
5. Wird innerhalb der Zeit Enter gedrückt, verhindert dies den Neustart.
6. Andernfalls wird der Server automatisch neu gestartet.

Mit diesen Schritten stellst du sicher, dass dein Server bei Abstürzen oder Stopps automatisch neu gestartet wird, solange keine Benutzereingabe erfolgt.

Dieser Guide hilft dir dabei, deinen Server zuverlässig und automatisch neu starten zu lassen, was besonders nützlich für die Aufrechterhaltung eines stabilen Betriebs ist.