espera que o programa termine no desligamento

1

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:

  1. O que há de errado com o meu loop while?
  2. Como posso fazer com que o Ubuntu aguarde enquanto esse script está sendo executado? Eu esperaria que o Ubuntu não fosse desligado enquanto meu script estivesse pendurado infinitamente, mas acontece de qualquer maneira.
por The1nk 02.09.2016 / 16:29

0 respostas