편집: 이것이 가능한 중복으로 표시된다는 질문은 스크립트가 실행되는 동안 종료를 방지하는 방법을 제공합니다. 내 문제는 종료 프로세스 중에 다음을 원한다는 것입니다.방아쇠종료를 계속하기 전에 스크립트를 실행하고 완료되도록 하세요. 억제제가 적용 가능한지 잘 모르겠습니다.
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
아웃하면 Java가 실제로 닫혔고 서버도 올바르게 닫혔음을 알 수 있습니다. 하지만 while 루프가 예상대로 작동하지 않습니다.
따라서 두 가지 질문이 있습니다.
- 내 while 루프에 어떤 문제가 있나요?
- 이 스크립트가 실행되는 동안 Ubuntu를 기다리게 하려면 어떻게 해야 합니까? 내 스크립트가 무한히 정지되는 동안 Ubuntu가 종료되지 않을 것으로 예상하지만 어쨌든 종료됩니다.