Я пытаюсь автоматизировать свой сервер Minecraft, потому что необходимость вручную переключать сессии tmux через некоторое время становится очень старой. Вот файл службы systemd, который я написал, чтобы помочь мне с этим:

[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

Выполнение строки ExecStart вручную работает отлично, процесс Java аккуратно помещается в отдельный сеанс tmux, к которому я могу присоединиться на досуге.

Попытка запустить сервер с помощью systemctl start minecraft@creative безуспешна, с десятками сообщений об ошибках, наподобие этих, заполняющих журнал перед тем, как в итоге произойти сбой:

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'.

Поскольку tmux проглатывает все сообщения об ошибках, которые могли произойти, я понятия не имею, что может пойти не так. Кто-нибудь сталкивался с этим раньше?

1 ответ1

1

systemd ожидает, что служба будет работать на переднем плане, чтобы отслеживать ее. Когда вы запускаете tmux detached, с помощью -d он разветвляет новый процесс и возвращает исходную команду. Я не подтвердил это с помощью tmux и minecraft, но попробуйте установить Type=forking в разделе « Service », чтобы заставить systemd отслеживать дочерний процесс, разветвленный командой, указанной в ExecStart .

Примечание: вы уверены, что вам нужен tmux здесь? Это гораздо проще без.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .