Minecraft-Server automatisch starten: systemd-Service und Cronjob

Veröffentlicht am Aktualisiert am 5 Min. Lesezeit

Nach einem Server-Neustart soll der Minecraft-Server von selbst wieder laufen. Wir zeigen die systemd-Service-Unit als sauberen Weg und den Cronjob mit @reboot als Alternative.

Ihr Minecraft-Server soll nach einem Neustart des Rootservers von selbst wieder online gehen, ohne dass Sie sich per SSH einloggen müssen? Dann sind Sie hier genau richtig.

Wir zeigen Ihnen zwei Wege: die systemd-Service-Unit als saubere und empfohlene Lösung sowie den klassischen Cronjob mit @reboot als schnelle Alternative. Beide Varianten funktionieren auf allen gängigen Linux-Distributionen, also unter Debian, Ubuntu, AlmaLinux und Rocky Linux.

systemd oder Cronjob: welcher Weg ist der richtige?

Ein Cronjob mit @reboot ist schnell eingerichtet, kennt aber nur einen einzigen Zeitpunkt: den Systemstart. Läuft dabei etwas schief oder stürzt der Server später ab, passiert nichts weiter.

Eine systemd-Service-Unit ist der saubere Weg und bringt mehrere Vorteile mit:

  • Der Server startet erst, wenn das Netzwerk wirklich bereit ist, statt nach einer geratenen Wartezeit.
  • Nach einem Absturz startet systemd den Server automatisch neu.
  • Sie bedienen den Server mit den gewohnten Befehlen systemctl start, stop, restart und status.
  • Fehlermeldungen landen im Journal und sind mit journalctl nachvollziehbar.

Wir empfehlen deshalb den systemd-Weg. Den Cronjob beschreiben wir weiter unten als Alternative für Fälle, in denen systemd nicht zur Verfügung steht.

Vorbereitung: Startbefehl, Benutzer und Verzeichnis notieren

Bevor Sie loslegen, brauchen Sie drei Angaben aus Ihrer bestehenden Installation:

  • Den Startbefehl aus Ihrer Datei "start.sh", also zum Beispiel screen -dmS spigot java -Xmx4G -jar spigot.jar
  • Den Benutzer, unter dem der Server läuft, im Beispiel "spigot"
  • Das Verzeichnis, in dem die Server-Datei liegt, im Beispiel /home/spigot/server

Ein typischer Inhalt einer start.sh sieht so aus:

#Dies ist lediglich ein Beispiel! Verwenden Sie den Inhalt Ihrer eigenen start.sh.

screen -S spigot java -Xmx2G -jar spigot.jar

Wichtig: Für den automatischen Start muss aus screen -S unbedingt screen -dmS werden. Der Grund: screen -S öffnet eine interaktive Sitzung und erwartet ein Terminal. Beim Systemstart gibt es kein Terminal, der Start würde also fehlschlagen. screen -dmS startet die Sitzung dagegen direkt im Hintergrund.

Falls Sie noch gar keinen Minecraft-Server eingerichtet haben, hilft Ihnen zuerst unsere Anleitung Minecraft-Server auf Debian installieren weiter.

systemd-Service-Unit für den Minecraft-Server anlegen

Unit-Datei erstellen

Legen Sie als root eine neue Service-Datei an:

nano /etc/systemd/system/minecraft.service

Tragen Sie folgenden Inhalt ein und passen Sie Benutzer, Verzeichnis, Arbeitsspeicher und Dateinamen an Ihre Installation an:

[Unit]
Description=Minecraft-Server
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
User=spigot
WorkingDirectory=/home/spigot/server
ExecStart=/usr/bin/screen -dmS spigot java -Xmx4G -jar spigot.jar
ExecStop=/usr/bin/screen -S spigot -X stuff "stop\n"
Restart=on-failure
RestartSec=15

[Install]
WantedBy=multi-user.target

Die wichtigsten Zeilen im Überblick:

  • After und Wants sorgen dafür, dass der Server erst startet, wenn das Netzwerk verfügbar ist.
  • User legt fest, unter welchem Benutzer der Server läuft. Betreiben Sie ihn niemals als root.
  • WorkingDirectory ist das Verzeichnis mit der Server-Datei. Ohne diese Angabe findet Java die JAR-Datei nicht.
  • ExecStop schickt den Befehl "stop" an die screen-Sitzung. Dadurch speichert der Server die Welt sauber, statt einfach abgeschossen zu werden.
  • Restart=on-failure startet den Server nach einem Absturz automatisch neu, RestartSec legt die Wartezeit in Sekunden fest.

Speichern Sie die Datei mit "STRG + X", dann "Y" und "Enter".

Dienst aktivieren und starten

Danach liest systemd die neue Datei ein, aktiviert den Autostart und startet den Server sofort:

systemctl daemon-reload
systemctl enable --now minecraft

Den aktuellen Zustand prüfen Sie mit:

systemctl status minecraft

Zeigt die Ausgabe "active", läuft der Dienst. Bei Problemen liefert das Journal die genaue Fehlermeldung:

journalctl -u minecraft -n 50

Server-Konsole erreichen

Der Server läuft weiterhin in einer screen-Sitzung. Da diese dem Benutzer "spigot" gehört, wechseln Sie zuerst in diesen Benutzer und öffnen dann die Konsole:

su spigot
screen -r spigot

Mit "STRG + A + D" verlassen Sie die Konsole wieder, ohne den Server zu beenden.

Server stoppen und neu starten

Ab sofort steuern Sie den Server über systemd:

systemctl stop minecraft
systemctl restart minecraft

Soll der Autostart wieder deaktiviert werden, genügt:

systemctl disable minecraft

Alternative: Autostart über einen Cronjob mit @reboot

Wenn Sie keine Service-Unit anlegen möchten, erreichen Sie den Autostart auch über die Crontab des jeweiligen Benutzers. Öffnen Sie die Crontab mit:

export VISUAL=nano; crontab -e

Fügen Sie Ihren Startbefehl als letzte Zeile mit dem Präfix @reboot ein:

@reboot <Inhalt Ihrer start.sh Datei>

#So sollte der Startparameter ungefähr aussehen, dies kann von Ihrem Start-Skript abweichen.

@reboot screen -dmS <Screen-Name> java -Xmx<AMOUNT>G -jar <Verzeichnis und Name der Minecraft-Server-Datei>.jar


#BEISPIEL:
@reboot screen -dmS spigot java -Xmx2G -jar /home/spigot/spigot.jar

Achten Sie auch hier darauf, dass screen -dmS und nicht screen -S verwendet wird. Wie Sie beliebige weitere Anwendungen und Skripte auf demselben Weg beim Serverstart mitstarten lassen, zeigt unsere Anleitung Programme beim Serverstart automatisch ausführen.

Autostart testen

Verlassen Sie sich nicht darauf, dass die Konfiguration stimmt, sondern testen Sie sie einmal bewusst. Starten Sie den Server neu:

reboot

Warten Sie ein bis zwei Minuten, melden Sie sich erneut per SSH an und prüfen Sie mit systemctl status minecraft beziehungsweise mit screen -ls, ob der Minecraft-Server wieder läuft. Verbinden Sie sich zusätzlich mit dem Spiel-Client, damit Sie sicher sind, dass der Server auch wirklich erreichbar ist.

Häufige Fehler beim Autostart

  • screen -S statt screen -dmS: der mit Abstand häufigste Fehler. Ohne -dm startet der Server beim Booten nicht.
  • Falsches Verzeichnis: Java findet die JAR-Datei nicht. Prüfen Sie WorkingDirectory beziehungsweise geben Sie im Cronjob den vollständigen Pfad zur JAR-Datei an.
  • Falscher Benutzer: Läuft der Dienst als root, gehören die neu erzeugten Weltdateien anschließend root, und der eigentliche Server-Benutzer kann sie nicht mehr schreiben.
  • Zu wenig Arbeitsspeicher: Ist der Wert hinter -Xmx größer als der freie Arbeitsspeicher, beendet der Kernel den Java-Prozess kurz nach dem Start wieder.

Häufige Fragen

systemd oder Cronjob: was ist der bessere Weg?
Eine systemd-Service-Unit ist die sauberere Lösung. Sie startet den Server erst, wenn das Netzwerk bereit ist, startet ihn nach einem Absturz automatisch neu und lässt sich mit systemctl start, stop und status bedienen. Ein Cronjob mit @reboot bietet keine dieser Funktionen.
Warum muss screen -S zu screen -dmS geändert werden?
screen -S öffnet eine interaktive Sitzung und erwartet ein Terminal. Beim Systemstart gibt es kein Terminal, deshalb schlägt der Start fehl. screen -dmS startet die Sitzung im Hintergrund und ist damit die richtige Variante für den Autostart.
Wie erreiche ich die Server-Konsole nach einem automatischen Start?
Melden Sie sich zuerst als der Benutzer an, unter dem der Dienst läuft, und öffnen Sie dann die Sitzung mit screen -r. Eine screen-Sitzung gehört immer nur dem Benutzer, der sie gestartet hat.
Startet systemd meinen Server auch nach einem Absturz neu?
Ja, sofern Sie Restart=on-failure in der Unit-Datei setzen. systemd startet den Server dann nach der unter RestartSec angegebenen Wartezeit erneut.
Wie prüfe ich, ob der Autostart wirklich funktioniert?
Starten Sie den Server bewusst einmal mit reboot neu und kontrollieren Sie danach mit systemctl status minecraft, ob der Dienst läuft. Bei Fehlern zeigt journalctl -u minecraft die genaue Meldung.

Minecraft-Server Autostart systemd CronJobs CronTabs Linux Gameserver Debian