Как я уничтожаю экранную сессию, если она не имеет никаких рабочих процессов?

Я использую 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 от мировых блоков, люди теряют объекты и случайно копируют материал),

0
задан 7 January 2020 в 17:36

1 ответ

кажется 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 не найдены в списке процессов, затем он убегает из цикла. Так как цикл повреждается, должно быть безопасно завершить работу экранной сессии

0
ответ дан 8 January 2020 в 11:37

Другие вопросы по тегам:

Похожие вопросы: