シャットダウン時にプログラムが終了するまで待つ

シャットダウン時にプログラムが終了するまで待つ

編集:この質問は重複している可能性があるとマークされており、スクリプトが実行中にシャットダウンを防ぐ方法を提供しています。私の問題は、シャットダウンプロセス中に、引き金シャットダウンを続行する前に、スクリプトを実行して終了させます。抑制剤が適用できるかどうかはわかりません。


システムの起動時に Minecraft を開くファイルがありrc.local、これが機能します:

ローカルディレクトリ:

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

安全なシャットダウン プロセスを開始して、シャットダウンを通知し、Minecraft を安全に終了できるようにしたいと考えています。現在、次のようになっています。

/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

rc0.d と rc6.d の両方にシンボリック リンクがあります。

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

.. しかし、動作しません。ログには正しい Minecraft シャットダウン メッセージ (ワールドの保存) が表示されず、最後のエコーも表示されません。スクリプトを手動で実行すると ( sudo ./shutdownMinecraft.sh)、永遠にハングしているように見えます。^c出力を見ると、Java が実際に終了し、サーバーが正しく終了したことが分かりますが、while ループは期待どおりに動作しません。

そこで、2つの質問です。

  1. while ループの何が問題なのでしょうか?
  2. このスクリプトの実行中に Ubuntu を待機させるにはどうすればよいですか? スクリプトが無限にハングしている間は Ubuntu がシャットダウンしないことを期待しますが、実際にはシャットダウンしてしまいます。

関連情報