EDIT: A questão que está marcada como uma possível duplicata oferece uma maneira de um script evitar o desligamento enquanto está em execução. Meu problema é que durante o processo de desligamento, queroacionarum 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 tenho um rc.local
arquivo que abre o Minecraft, funciona:
/etc/rc.local:
su -l minecraftUser -c "screen -dmS minecraft /home/minecraftUser/server/wrapper.sh"
Estou tentando iniciar um processo de desligamento seguro, para poder sinalizar um desligamento e fechar o Minecraft com segurança. Isso é o que 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 rc0.d e rc6.d:
K01shutdownminecraft -> /etc/init.d/shutdownMinecraft.sh
.. Porém, não funciona. O log não mostra as mensagens corretas de desligamento do Minecraft (salvando o mundo) e também não mostra o eco final. Se eu executar o script manualmente ( sudo ./shutdownMinecraft.sh
), ele travará aparentemente para sempre. ^c
A exibição mostra que o Java de fato fechou e o servidor fechou corretamente - mas meu loop while não funciona conforme o esperado.
Então, duas perguntas:
- O que há de errado com meu loop while?
- Como posso fazer com que o Ubuntu espere enquanto este script está em execução? Eu esperaria que o Ubuntu não desligasse enquanto meu script estivesse pendurado infinitamente, mas acontece mesmo assim.