2013-09-23 5 views
0

У меня есть сервер Minecraft работает в экране, и прямо сейчас, это просто скрипт, который запускает Java так:открыт экран процесса в терминале из сценария

screen -dmS mc java -Xincgc -Xms1024M -jar craftbukkit-1.6.4-b2882.jar

В основном это только начинается Minecraft в экран экрана в фоновом режиме, и я могу получить к нему доступ с screen -r mc через SSH. Однако то, что я хотел бы сделать, заключается в том, что процесс всегда находится на мониторе сервера, а также доступен через ssh с screen -x mc. Кроме того, у меня есть скрипт restart.sh, который обрабатывает команду stop для процесса mc каждые два часа, а затем запускает скрипт start.sh. Сервер находится на уровне запуска 3, поэтому я не думаю, что gnome-terminal -e "screen -x mc" будет работать. Кроме того, похоже, что скрипт перезапуска запускает mc вне экрана. Когда я нахожу SSH на сервере, screen -ls ничего не появляется, но процесс сервера minecraft запущен, и я могу подключиться к нему. Вот сценарий:

#!/bin/sh 

screen -x mc 
screen -s mc stuff "say Server Restarting in 15 minutes." 
screen -s mc -X eval "stuff \015" 
sleep 600 
screen -x mc 
screen -x mc -X stuff "say Server restarting in 5 minutes." 
screen -s mc -X eval "stuff \015" 
sleep 240 
screen -x mc 
screen -s mc -X stuff "say Server restarting in 1 minute." 
screen -s mc -X eval "stuff \015" 
sleep 60 
screen -S mc -X stuff "say Server restarting." 
screen -S mc -X eval "stuff \015" 
screen -S -X stuff "kickall Server Restarting, it should be back up in about a minute." 
screen -S mc -X eval "stuff \015" 
sleep 2 
screen -S mc -X stuff "stop" 
screen -S mc -X eval "stuff \015" 
sleep 30 
screen -wipe 
sleep 3 
cd /minecraft/server/craftbukkit 
./start.sh 

Любые идеи?

ответ

0
screen -dmS mc command 

запускает экран, который живет только до < команды > завершения
например всякий раз, когда java quits - экран также завершается.

Start экран, как это вместо:

screen -dmS mc bash 
screen -s mc -X eval 'stuff "java -Xincgc -Xms1024M -jar craftbukkit-1.6.4-b2882.jar\015"' 

и перезапустить соответственно тоже:

screen -s mc -X eval 'stuff "cd /minecraft/server/craftbukkit\015"' 
screen -s mc -X eval 'stuff "./start.sh\015"' 

Надеется, что это помогает :)

У меня нет Java/Minecraft здесь, так Я буду использовать инструмент «читать» в качестве образца:

screen -dmS mc bash        # starts screen&bash 
screen -s mc -X eval 'stuff "read\015"'   # tells bash to start "read" 
screen -s mc -X eval 'stuff "test\015"'   # tells read the input "test" 
screen -s mc -X eval 'stuff "echo \$REPLY\015"' # tells bash to echo the $REPLY var 
screen -s mc -X eval 'stuff "cd /tmp\015"'  # tells bash to cd into /tmp 

Как вы видите - материал посылает вход не в bash, а просто вообще - в экран, например. в любое приложение, запущенное под bash и в настоящее время чтение stdin.

+0

Это похоже на работоспособный вариант, но, боюсь, я не совсем понимаю бит перезапуска. Как я могу остановить сервер из задания cron? Кажется, что любая команда, которую я делаю, будет идти в bash, а не в minecraft. Как бы то ни было, я набиваю команду stop из cron-скрипта в mc-процесс. Не могли бы вы немного пояснить? – InventiousTech

+0

Я обновил исходный ответ, добавив тестовый образец за минуту. – Vlad

+0

Спасибо, я думаю, что это сработает. – InventiousTech

Смежные вопросы