Warten Sie, bis das Programm beim Herunterfahren beendet wird

Warten Sie, bis das Programm beim Herunterfahren beendet wird

EDIT: Die Frage, die als mögliches Duplikat markiert ist, bietet eine Möglichkeit, wie ein Skript das Herunterfahren während der Ausführung verhindern kann. Mein Problem ist, dass ich während des Herunterfahrensauslösenein Skript ausführen und beenden lassen, bevor mit dem Herunterfahren fortgefahren wird. Ich bin nicht sicher, ob Inhibitoren anwendbar sind.


Beim Systemstart habe ich eine rc.localDatei, die Minecraft öffnet. Das funktioniert:

/etc/rc.local:

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

Ich versuche, einen sicheren Herunterfahrvorgang zu starten, damit ich ein Herunterfahren signalisieren und Minecraft sicher schließen kann. Das habe ich derzeit:

/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

und symbolische Links sowohl in rc0.d als auch in rc6.d:

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

.. Es funktioniert jedoch nicht. Das Protokoll zeigt nicht die richtigen Minecraft-Shutdown-Meldungen (Welt wird gespeichert) und auch nicht das abschließende Echo. Wenn ich das Skript manuell ausführe ( sudo ./shutdownMinecraft.sh), bleibt es scheinbar ewig hängen. ^cing out zeigt mir, dass Java tatsächlich geschlossen wurde und der Server korrekt geschlossen wurde – aber meine While-Schleife funktioniert nicht wie erwartet.

Also, zwei Fragen:

  1. Was ist falsch an meiner While-Schleife?
  2. Wie kann ich Ubuntu dazu bringen, zu warten, während dieses Skript ausgeführt wird? Ich würde erwarten, dass Ubuntu nicht herunterfährt, während mein Skript unendlich hängt, aber es tut es trotzdem.

verwandte Informationen