Minecraft-Server kann nicht mit tmux mit systemctl gestartet werden

511
Peter W.

Ich versuche, meinen Minecraft-Server zu automatisieren, da das manuelle Abarbeiten von Tmux-Sitzungen nach einer Weile sehr alt wird. Hier ist die systemd-Servicedatei, die ich geschrieben habe, um mir dabei zu helfen:

[Unit] Description=Minecraft Server: %i After=network.target  [Service] WorkingDirectory=/opt/minecraft/servers/%i User=minecraft Group=minecraft  Restart=on-failure  ExecStart=/usr/bin/tmux new -s mc-%i -d '/usr/bin/java -Xms1G -Xmx6G -jar forge-universal.jar nogui' bash  ExecStop=/usr/bin/tmux send -t mc-%i 'say SERVER WILL SHUT DOWN IN 10 SECONDS' ENTER ExecStop=/bin/sleep 10 ExecStop=/usr/bin/tmux send -t mc-%i 'stop' ENTER  [Install] WantedBy=multi-user.target 

Die ExecStartmanuelle Ausführung der Zeile funktioniert perfekt. Der Java-Prozess wird ordentlich in eine separate tmux-Sitzung eingefügt, an die ich mich nach Belieben anschließen kann.

Der Versuch, den Server über zu starten, systemctl start minecraft@creativeschlägt fehl, wobei Dutzende von Fehlermeldungen wie diese das Journal auffüllen, bevor sie endgültig fehlschlagen:

Oct 11 21:34:45 kingcolour systemd[1]: minecraft@private.service: Service hold-off time over, scheduling restart. Oct 11 21:34:45 kingcolour systemd[1]: Stopped Minecraft Server: private. Oct 11 21:34:45 kingcolour systemd[1]: Starting Minecraft Server: private... Oct 11 21:34:45 kingcolour systemd[1]: minecraft@private.service: Control process exited, code=exited status=1 Oct 11 21:34:45 kingcolour systemd[1]: Failed to start Minecraft Server: private. Oct 11 21:34:45 kingcolour systemd[1]: minecraft@private.service: Unit entered failed state. Oct 11 21:34:45 kingcolour systemd[1]: minecraft@private.service: Failed with result 'exit-code'. Oct 11 21:34:45 kingcolour systemd[1]: minecraft@private.service: Service hold-off time over, scheduling restart. Oct 11 21:34:45 kingcolour systemd[1]: Stopped Minecraft Server: private. Oct 11 21:34:45 kingcolour systemd[1]: Starting Minecraft Server: private... Oct 11 21:34:45 kingcolour systemd[1]: Started Minecraft Server: private. Oct 11 21:34:45 kingcolour systemd[1]: minecraft@private.service: Control process exited, code=exited status=1 Oct 11 21:34:45 kingcolour systemd[1]: minecraft@private.service: Unit entered failed state. Oct 11 21:34:45 kingcolour systemd[1]: minecraft@private.service: Failed with result 'exit-code'. Oct 11 21:34:45 kingcolour systemd[1]: minecraft@private.service: Service hold-off time over, scheduling restart. Oct 11 21:34:45 kingcolour systemd[1]: Stopped Minecraft Server: private. Oct 11 21:34:45 kingcolour systemd[1]: minecraft@private.service: Start request repeated too quickly. Oct 11 21:34:45 kingcolour systemd[1]: Failed to start Minecraft Server: private. Oct 11 21:34:45 kingcolour systemd[1]: minecraft@private.service: Unit entered failed state. Oct 11 21:34:45 kingcolour systemd[1]: minecraft@private.service: Failed with result 'exit-code'. 

Da tmux alle Fehlermeldungen verschluckt, die hätte passieren können, habe ich keine Ahnung, was schief gehen könnte. Hat jemand das schon mal gesehen?

0
Bitte fügen Sie Ihrer Frage die Ausgabe von "journalctl -u minecraft@creative.service -b" hinzu. Bitte [bearbeiten] (https://superuser.com/posts/1366001/edit) Ihre Frage und antworten Sie nicht in den Kommentaren. Nordlys Jeger vor 5 Jahren 0
Ich habe die letzten 20 Zeilen von `journalctl`-Spam anstelle der letzten 7 hinzugefügt. Peter W. vor 5 Jahren 0
Was ist der Sinn des `bash`-Arguments am Ende? Es sieht so aus, als würden Sie tmux zwei verschiedene Befehle geben, um zu laufen? mjb2kmn vor 5 Jahren 0
Gott verdammt. Gott verdammt verdammt noch mal. Ich habe mit verschiedenen Versionen der Servicedatei experimentiert, da keine davon zu funktionieren schien, aber ich muss diesen Teil vermisst haben. Wenn Sie das fehlerhafte `bash 'entfernen, funktioniert das Skript. Peter W. vor 5 Jahren 0

1 Antwort auf die Frage

1
mjb2kmn

systemd erwartet, dass ein Dienst im Vordergrund läuft, um ihn zu überwachen. Wenn Sie tmux getrennt ausführen, forciert -des einen neuen Prozess und gibt den ursprünglichen Befehl zurück. Ich habe dies nicht mit tmux und minecraft bestätigt, aber versuche, Type=forkingin dem ServiceAbschnitt systemd anzuweisen, den untergeordneten Prozess zu verfolgen, der von dem in angegebenen Befehl abgezweigt wird ExecStart.

Randbemerkung: Sind Sie sicher, dass Sie hier tmux brauchen? Es ist viel einfacher ohne.

Das Hinzufügen von 'Type = forking' hat leider nichts getan. Ich bekomme genau die gleichen Fehlermeldungen. Und ich brauche tmux hier. Das Starten von Minecraft führt zu einer interaktiven Eingabeaufforderung, die ich zur Verwaltung des Servers benötige. Peter W. vor 5 Jahren 0
Vergiss das. In Kombination mit dem Kommentar von mjb2kmn funktionierte das Skript. Vielen Dank! Peter W. vor 5 Jahren 0