
Instalei um servidor FTB modificado em meu servidor Ubuntu, criei um usuário e um grupo chamado "ftb" e dei a ele seu próprio diretório /opt/ftb/
que contém uma pasta com os arquivos do servidor. Na pasta do servidor, existe um arquivo start.sh para iniciar o servidor. Como faço um arquivo de serviço do sistema para poder usar comandos como systemctl status ftbacademy.service
, systemctl start ftbacademy.service
e systemctl stop ftbacademy.service
. Ao parar o servidor, desejo que ele salve e feche o servidor. Qual seria a aparência do arquivo .service? Eu sei que tem que ser colocado /etc/systemd/system/
, mas não sei como escrever o arquivo que faria o usuário ftb abrir seu próprio terminal virtual ou qualquer outra coisa para poder salvar o mundo e então parar o servidor.
Servidor Ubuntu versão 20.04.3
Site de download de arquivos do servidor FTB Academy 1.16 usado:https://feed-the-beast.com/modpacks/88/server/2077Selecionei a opção de download do Linux e executei o arquivo de instalação para baixar automaticamente os arquivos do servidor.
Também estou usando uma versão diferente do JDK para executar o arquivo do servidor, então alterei o arquivo start.sh para este:
#!/bin/bash
if ! grep -q "eula=true" eula.txt; then
echo "Do you agree to the Mojang EULA available at https://account.mojang.com/documents/minecraft_eula ?"
read -N 1 -p "[y/n] " EULA
if [ "$EULA" = "y" ]; then
echo "eula=true" > eula.txt
echo
fi
fi
/usr/lib/jvm/java-11-openjdk-amd64/bin/java -javaagent:log4jfix/Log4jPatcher-1.0.0.jar -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -Xmx5000M -Xms4000M -jar forge-1.16.5-36.2.2.jar nogui
Responder1
Criei um arquivo chamado [email protected]
no local /etc/systemd/system/
. O arquivo contém o seguinte:
[Unit]
Description=FTB Server: %i
After=network.target
[Service]
WorkingDirectory=/opt/ftb/%i
User=ftb
Group=ftb
Restart=always
ExecStart=/usr/bin/screen -DmS mc-%i bash start.sh
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say SERVER SHUTTING DOWN IN 15 SECONDS..."\015'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say SERVER SHUTTING DOWN IN 10 SECONDS..."\015'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say SERVER SHUTTING DOWN IN 5 SECONDS..."\015'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "save-all"\015'
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "stop"\015'
[Install]
WantedBy=multi-user.target
Então usei systemctl enable ftb@academy
e systemctl start ftb@academy
para habilitar e iniciar o servidor. Também percebi que quando criei inicialmente o usuário ftb e dei a ele a propriedade da pasta, não dei permissão para as subpastas, então foi negada permissão para iniciar o servidor.
Responder2
Observe o URL do EULA no script. Tudo o que ele faz é perguntar se você leu e, se aceitar, seus termos, mas somente se ainda não tiver sido questionado e respondido sim.
Portanto, após a primeira execução, ele executará apenas as linhas superior e inferior.
A maneira mais fácil de configurá-lo (o que economizará tempo no longo prazo) é adicionar um alias para o comando na última linha, que realmente configura e inicia o arquivo do servidor. Isso pode ser feito com:
MC_CMD='alias start_srvr="/usr/lib/jvm/java-11-openjdk-amd64/bin/java -javaagent:log4jfix/Log4jPatcher-1.0.0.jar -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -Xmx5000M -Xms4000M -jar forge-1.16.5-36.2.2.jar nogui"' && echo "${MC_CMD}" >> ~/.bash_aliases || echo "${MC_CMD}" >> ~/.bashrc
Executar o comando que adicionei acima é apenas uma pequena conveniência, então você não precisa se preocupar em adicionar o script ou PATH
ter que calcular o caminho relativo ou digitar o caminho completo toda vez que quiser iniciar o servidor.
Se você decidir excluir o servidor, poderá remover o “comando” editando ~/.bash_aliases
e removendo a única linha que o contém.