esperar a que el programa termine al apagarse

esperar a que el programa termine al apagarse

EDITAR: La pregunta de que esto está marcado como un posible duplicado ofrece una forma para que un script evite el apagado mientras se está ejecutando. Mi problema es que durante el proceso de apagado, quierodesencadenarejecute un script y déjelo finalizar antes de continuar con el apagado. No estoy seguro de que los inhibidores sean aplicables.


Al iniciar el sistema tengo un rc.localarchivo que abre Minecraft, esto funciona:

/etc/rc.local:

su -l minecraftUser -c "screen -dmS minecraft /home/minecraftUser/server/wrapper.sh"

Estoy intentando iniciar un proceso de apagado seguro, para poder indicar un apagado y cerrar Minecraft de forma segura. Esto es lo que tengo actualmente:

/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

y enlaces simbólicos tanto en rc0.d como en rc6.d:

K01shutdownminecraft -> /etc/init.d/shutdownMinecraft.sh

.. Sin embargo, no funciona. El registro no muestra los mensajes correctos de cierre de Minecraft (salvando el mundo) y tampoco muestra ese eco final. Si ejecuto el script manualmente ( sudo ./shutdownMinecraft.sh), aparentemente se bloquea para siempre. ^cAl salir me muestra que Java de hecho se cerró y que el servidor se cerró correctamente, pero mi bucle while no funciona como se esperaba.

Entonces, dos preguntas:

  1. ¿Qué pasa con mi bucle while?
  2. ¿Cómo puedo hacer que Ubuntu espere mientras se ejecuta este script? Esperaría que Ubuntu no se cerrara mientras mi script se cuelga infinitamente, pero lo hace de todos modos.

información relacionada