Iniciar o servidor Minecraft automaticamente: serviço systemd e cronjob

Publicado a Atualizado a 5 min de leitura

Depois de um reinício do servidor, o servidor Minecraft deve voltar a correr sozinho. Mostramos a unidade de serviço systemd como caminho limpo e o cronjob com @reboot como alternativa.

Quer que o seu servidor Minecraft volte a ficar online sozinho depois de um reinício do servidor root, sem ter de iniciar sessão por SSH? Então está no sítio certo.

Mostramos-lhe dois caminhos: a unidade de serviço systemd como solução limpa e recomendada, bem como o clássico cronjob com @reboot como alternativa rápida. Ambas as variantes funcionam em todas as distribuições Linux correntes, ou seja, em Debian, Ubuntu, AlmaLinux e Rocky Linux.

systemd ou cronjob: qual é o caminho certo?

Um cronjob com @reboot configura-se depressa, mas conhece apenas um único momento: o arranque do sistema. Se aí algo correr mal, ou se o servidor abortar mais tarde, não acontece mais nada.

Uma unidade de serviço systemd é o caminho limpo e traz várias vantagens:

  • O servidor só arranca quando a rede está realmente pronta, em vez de esperar um tempo estimado à sorte.
  • Depois de uma falha, o systemd reinicia o servidor automaticamente.
  • Opera o servidor com os comandos habituais systemctl start, stop, restart e status.
  • As mensagens de erro vão parar ao journal e podem ser seguidas com journalctl.

Por isso recomendamos o caminho do systemd. O cronjob é descrito mais abaixo, como alternativa para os casos em que o systemd não está disponível.

Preparação: anotar o comando de arranque, o utilizador e o diretório

Antes de começar, precisa de três informações da sua instalação existente:

  • O comando de arranque do seu ficheiro "start.sh", por exemplo screen -dmS spigot java -Xmx4G -jar spigot.jar
  • O utilizador com que o servidor corre, neste exemplo "spigot"
  • O diretório onde está o ficheiro do servidor, neste exemplo /home/spigot/server

O conteúdo típico de um start.sh tem este aspeto:

#Isto é apenas um exemplo! Utilize o conteúdo do seu próprio start.sh.

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

Importante: para o arranque automático, screen -S tem obrigatoriamente de passar a screen -dmS. A razão: screen -S abre uma sessão interativa e espera um terminal. No arranque do sistema não existe terminal, por isso o arranque falharia. Já screen -dmS inicia a sessão diretamente em segundo plano.

Se ainda não tem nenhum servidor Minecraft instalado, comece pelo nosso tutorial Instalar um servidor Minecraft em Debian.

Criar uma unidade de serviço systemd para o servidor Minecraft

Criar o ficheiro da unidade

Crie, como root, um novo ficheiro de serviço:

nano /etc/systemd/system/minecraft.service

Introduza o seguinte conteúdo e adapte o utilizador, o diretório, a RAM e o nome do ficheiro à sua instalação:

[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

As linhas mais importantes num relance:

  • After e Wants garantem que o servidor só arranca quando a rede está disponível.
  • User define com que utilizador o servidor corre. Nunca o opere como root.
  • WorkingDirectory é o diretório com o ficheiro do servidor. Sem esta indicação, o Java não encontra o ficheiro JAR.
  • ExecStop envia o comando "stop" para a sessão screen. Assim o servidor grava o mundo de forma limpa, em vez de ser simplesmente abatido.
  • Restart=on-failure reinicia o servidor automaticamente após uma falha, RestartSec define o tempo de espera em segundos.

Guarde o ficheiro com "CTRL + X", depois "Y" e "Enter".

Ativar e iniciar o serviço

De seguida, o systemd lê o novo ficheiro, ativa o arranque automático e inicia o servidor de imediato:

systemctl daemon-reload
systemctl enable --now minecraft

Verifique o estado atual com:

systemctl status minecraft

Se a saída mostrar "active", o serviço está a correr. Em caso de problemas, o journal fornece a mensagem de erro exata:

journalctl -u minecraft -n 50

Aceder à consola do servidor

O servidor continua a correr dentro de uma sessão screen. Como essa sessão pertence ao utilizador "spigot", mude primeiro para esse utilizador e abra depois a consola:

su spigot
screen -r spigot

Com "CTRL + A + D" sai novamente da consola sem terminar o servidor.

Parar e reiniciar o servidor

A partir de agora controla o servidor através do systemd:

systemctl stop minecraft
systemctl restart minecraft

Se quiser desativar novamente o arranque automático, basta:

systemctl disable minecraft

Alternativa: arranque automático através de um cronjob com @reboot

Se não quiser criar uma unidade de serviço, também consegue o arranque automático através da crontab do respetivo utilizador. Abra a crontab com:

export VISUAL=nano; crontab -e

Acrescente o seu comando de arranque como última linha, com o prefixo @reboot:

@reboot <conteúdo do seu ficheiro start.sh>

#Este é aproximadamente o aspeto que o parâmetro de arranque deve ter, pode divergir do seu próprio script de arranque.

@reboot screen -dmS <nome-do-screen> java -Xmx<AMOUNT>G -jar <diretório e nome do ficheiro do servidor Minecraft>.jar


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

Também aqui deve certificar-se de que é usado screen -dmS e não screen -S. O nosso tutorial Executar programas automaticamente no arranque do servidor mostra como iniciar da mesma forma quaisquer outras aplicações e scripts quando o servidor arranca.

Testar o arranque automático

Não confie simplesmente em que a configuração está correta, teste-a uma vez de propósito. Reinicie o servidor:

reboot

Espere um a dois minutos, volte a iniciar sessão por SSH e verifique com systemctl status minecraft ou com screen -ls se o servidor Minecraft está novamente a correr. Ligue-se adicionalmente com o cliente do jogo, para ter a certeza de que o servidor está mesmo acessível.

Erros frequentes no arranque automático

  • screen -S em vez de screen -dmS: de longe o erro mais frequente. Sem -dm, o servidor não arranca no boot.
  • Diretório errado: o Java não encontra o ficheiro JAR. Verifique WorkingDirectory ou indique no cronjob o caminho completo para o ficheiro JAR.
  • Utilizador errado: se o serviço correr como root, os ficheiros do mundo recém-criados passam a pertencer ao root e o utilizador previsto para o servidor deixa de os poder escrever.
  • RAM insuficiente: se o valor a seguir a -Xmx for maior do que a memória livre, o kernel termina o processo Java pouco depois do arranque.

Perguntas frequentes

systemd ou cronjob: qual é o melhor caminho?
Uma unidade de serviço systemd é a solução mais limpa. Só arranca o servidor quando a rede está pronta, reinicia-o automaticamente depois de uma falha e permite operá-lo com systemctl start, stop e status. Um cronjob com @reboot não oferece nenhuma destas funções.
Porque é que screen -S tem de passar a screen -dmS?
O screen -S abre uma sessão interativa e espera um terminal. No arranque do sistema não existe terminal, por isso o arranque falha. O screen -dmS inicia a sessão em segundo plano e é, assim, a variante correta para o arranque automático.
Como acedo à consola do servidor depois de um arranque automático?
Inicie sessão primeiro com o utilizador com que o serviço corre e abra depois a sessão com screen -r. Uma sessão screen pertence sempre apenas ao utilizador que a iniciou.
O systemd também reinicia o meu servidor depois de uma falha?
Sim, desde que defina Restart=on-failure no ficheiro da unidade. O systemd volta então a iniciar o servidor após o tempo de espera indicado em RestartSec.
Como verifico se o arranque automático funciona mesmo?
Reinicie o servidor uma vez de propósito com reboot e controle depois com systemctl status minecraft se o serviço está a correr. Em caso de erro, journalctl -u minecraft mostra a mensagem exata.

Servidor Minecraft Arranque automático systemd Cronjobs Crontabs Linux Servidor de jogos Debian