EDIT: A questão de que isso é marcado como uma possível duplicação de oferece uma maneira de um script para evitar o desligamento enquanto ele está sendo executado. Meu problema é que, durante o processo de desligamento, eu quero acionar um script para ser executado e deixá-lo terminar, antes de continuar o desligamento. Não tenho certeza se os inibidores são aplicáveis.
Na inicialização do sistema, eu tenho um arquivo rc.local
que abre o Minecraft, isso funciona:
/etc/rc.local:
su -l minecraftUser -c "screen -dmS minecraft /home/minecraftUser/server/wrapper.sh"
Estou tentando fazer um processo seguro de desligamento, para que eu possa sinalizar um desligamento e fazer com que ele feche o Minecraft com segurança. Isso é o que eu tenho atualmente:
/etc/init.d/shutdownMinecraft.sh:
su -l minecraftUser -c "screen -S minecraft -p 0 -X stuff \"stop $(printf \r)\""
while [ -e /proc/$(pidof java) ]; do sleep 0.1; done
echo "Done stopping server" >> /home/minecraftUser/server/logs/latest.log
e links simbólicos em ambos rc0.d e rc6.d:
K01shutdownminecraft -> /etc/init.d/shutdownMinecraft.sh
.. No entanto, isso não funciona. O log não mostra as mensagens de desligamento de Minecraft corretas (salvando o mundo) e também não mostra o eco final. Se eu executar o script manualmente ( sudo ./shutdownMinecraft.sh
), ele ficará pendente para sempre. ^c
out me mostra que o Java de fato fechou, e o servidor fechou corretamente - mas o meu loop while não funciona como esperado.
Então, duas perguntas: