Не удается запустить сервер Minecraft в tmux с помощью systemctl

412
Peter W.

Я пытаюсь автоматизировать свой сервер 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 проглатывает все сообщения об ошибках, которые могли произойти, я понятия не имею, что может пойти не так. Кто-нибудь сталкивался с этим раньше?

0
пожалуйста, добавьте вывод `journalctl -u minecraft@creative.service -b` к вашему вопросу. пожалуйста [edit] (https://superuser.com/posts/1366001/edit) свой вопрос и не отвечайте в комментариях. Nordlys Jeger 5 лет назад 0
Добавили последние 20 строк спама `journalctl` вместо последних 7. Peter W. 5 лет назад 0
Какой смысл аргумента `bash` в конце? Похоже, вы даете 2 разных команды для запуска tmux? mjb2kmn 5 лет назад 0
Черт побери. Боже, чёрт побери. Я экспериментировал с различными версиями служебного файла, так как ни одна из них, похоже, не работала, но я, должно быть, пропустил эту часть. Удаление этого ошибочного `bash` заставляет скрипт работать. Peter W. 5 лет назад 0

1 ответ на вопрос

1
mjb2kmn

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

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

К сожалению, добавление `Type = forking` ничего не сделало. Я получаю точно такие же сообщения об ошибках. И мне нужен Tmux здесь. Запуск Minecraft приводит к интерактивной подсказке, которая мне нужна для администрирования сервера. Peter W. 5 лет назад 0
Сотрите это. Это, в сочетании с комментарием mjb2kmn, заставило скрипт работать. Спасибо! Peter W. 5 лет назад 0

Похожие вопросы