Não é possível iniciar o servidor Minecraft no tmux com systemctl

0

Eu estou tentando automatizar o meu servidor Minecraft porque ter que lidar manualmente com as sessões do tmux fica muito antigo depois de um tempo. Aqui está o arquivo de serviço do systemd que eu escrevi para me ajudar com isso:

[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

Executando a linha ExecStart manualmente funciona perfeitamente, o processo Java é colocado em uma sessão tmux desanexada que eu posso anexar no meu tempo livre.

A tentativa de iniciar o servidor via systemctl start minecraft@creative falha miseravelmente, com dezenas de mensagens de erro como essas preenchendo o diário antes de finalmente falhar:

Oct 11 21:34:45 kingcolour systemd[1]: [email protected]: 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]: [email protected]: 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]: [email protected]: Unit entered failed state.
Oct 11 21:34:45 kingcolour systemd[1]: [email protected]: Failed with result 'exit-code'.
Oct 11 21:34:45 kingcolour systemd[1]: [email protected]: 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]: [email protected]: Control process exited, code=exited status=1
Oct 11 21:34:45 kingcolour systemd[1]: [email protected]: Unit entered failed state.
Oct 11 21:34:45 kingcolour systemd[1]: [email protected]: Failed with result 'exit-code'.
Oct 11 21:34:45 kingcolour systemd[1]: [email protected]: 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]: [email protected]: 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]: [email protected]: Unit entered failed state.
Oct 11 21:34:45 kingcolour systemd[1]: [email protected]: Failed with result 'exit-code'.

Como o tmux engole todas as mensagens de erro que poderiam ter acontecido, não tenho idéia do que poderia estar dando errado. Alguém já encontrou isso antes?

    
por Peter W. 11.10.2018 / 21:09

1 resposta

1

O systemd espera que um serviço permaneça em execução em primeiro plano para poder monitorá-lo. Quando você executa o tmux desanexado, com -d , ele bifurca um novo processo e retorna o comando original. Eu não confirmei isso com tmux e minecraft mas tente definir Type=forking na seção Service para dizer ao systemd para rastrear o processo filho bifurcado a partir do comando especificado em ExecStart .

Nota: Você tem certeza que precisa do tmux aqui? É muito mais simples sem.

    
por 11.10.2018 / 21:31