EDIT: Вопрос, что это отмечено как возможный дубликат предлагает способ для скрипта предотвратить выключение во время его работы. Моя проблема в том, что во время процесса выключения я хочукурокскрипт для запуска и дайте ему завершиться, прежде чем продолжить выключение. Я не уверен, что ингибиторы применимы.
При запуске системы у меня есть rc.local
файл, который открывает Minecraft, это работает:
/etc/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
ing out показывает, что Java действительно закрылась, и сервер закрылся правильно — но мой цикл while не работает так, как ожидалось.
Итак, два вопроса:
- Что не так с моим циклом while?
- Как заставить Ubuntu ждать, пока этот скрипт выполняется? Я ожидал, что Ubuntu не выключится, пока мой скрипт висит бесконечно, но он все равно выключается.