Я использую screen
для выполнения сервера Minecraft, и я перезапускаю его каждый день. Это - мой код запуска:
screen -mdS mcserver
screen -S mcserver -p 0 -X stuff "java -Xmx4G -jar server.jar^M"
Это - мой код остановки:
screen -S mcserver -p 0 -X stuff "stop^M"
sleep 10
screen -XS mcserver quit
Отправка команды stop
заставляет сервер Minecraft спасти мир, который может занять несколько секунд. Есть ли способ заставить программу ожидать до java
(Сервер Minecraft), не работает, и затем уничтожьте screen
? Если я уничтожаю screen
прежде чем я отправлю stop
к Minecraft мир может иметь несколько незначительных сбоев. (Объекты плеера desync от мировых блоков, люди теряют объекты и случайно копируют материал),
кажется scriptable мне. Вы могли попытаться делать что-то просто как это
#!/bin/bash
#Stop the minecraft server
screen -S mcserver -p 0 -X stuff "stop^M"
while true
do
echo "checking for java..."
sleep 2
ps aux |grep 'server.jar' |grep -v grep
[ $? -eq 1 ] && break
done
screen -XS mcserver quit
Это в основном, циклы до server.jar не найдены в списке процессов, затем он убегает из цикла. Так как цикл повреждается, должно быть безопасно завершить работу экранной сессии