Eu usei o script aqui para criar um serviço para iniciar e parar um servidor Minecraft na inicialização e no desligamento. O script basicamente inicia o arquivo jar do servidor em uma tela GNU (ele também faz backups e atualizações, mas eles estão funcionando bem).
Isso inicia o servidor bem, mas interrompe o servidor abruptamente, em vez de enviar uma mensagem ao servidor, usando o comando /stop
para parar o servidor normalmente (como o script deve fazer e faz se sudo service minecraft stop
for chamado enquanto o sistema ainda está em execução).
Eu usei sudo update-rc.d minecraft defaults 20 01
, o que deve garantir que o servidor esteja entre os primeiros processos a serem parados.
Eu posso dizer que isso está funcionando, pois as primeiras quatro linhas mostradas após o início de um desligamento são:
[ OK ] Stopped target Graphical Interface.
Starting Unattended Upgrades...
[ OK ] Stopped target Multi-User System
Stopping LSB: Minecraft server...
Existe então um monte de mensagens de Parar e Parar. O servidor pára abruptamente durante esse período (os clientes são desconectados sem aviso) e, em seguida:
[******] A stop job is running for LSB: Minecraft server (17s / 5min)
com os segundos contando até geralmente cerca de 17 antes das últimas telas - cheias de mensagens antes que o sistema seja desligado.
Estou assumindo que isso significa que o serviço é 'avisado' para parar no início do processo de desligamento, mas leva um tempo para fazê-lo (devido a ele enviando um alerta no servidor, esperando, salvando, etc) enquanto o sistema está aguardando que o script faça isso, ele interrompe outros serviços que fazem com que todos os clientes sejam desconectados antes que a mensagem de aviso seja exibida. Eu tentei adicionar $network
a Required-Stop
sem sucesso.
O que preciso fazer é fazer com que o serviço pare de uma vez sem que outros serviços parem simultaneamente. Como eu faria isso?
Estou usando o Ubuntu 15.04 em um XenServer.
Veja o log de desligamento completo aqui .