2014-01-02 4 views
3

Я запускаю игровой сервер на удаленном сервере, где я использую отдельный экран, чтобы он не работал. Теперь я создаю скрипт, который можно использовать для закрытия сервера, резервного копирования всех жизненно важных файлов и запуска его снова, однако у меня есть несколько трудностей с работой с экраном.Использование экрана в сценарии bash

Я предположил, что могу просто переключиться на отдельный экран в сценарии (после того, как сервер уже был закрыт), вызывая экран -r в скрипте. Но это не работает, потому что, если я запускаю скрипт с внешнего экрана, он просто запускает сервер в этом сеансе.

screen -r 
cd ~/servers/StarMade/ 
sh StarMade-dedicated-server-linux.sh 
screen -d 

Это то, что я думал, сделаю трюк, но это не так. Может быть, кто-то может помочь мне здесь. Я не эксперт по bash. На самом деле это возможно мой первый сценарий bash, который не включает «Hello World». Благодарю.

+0

Просто учтите «Супервизор», подходящий инструмент для ваших нужд. – Robert

+0

Может быть, слишком много избытка для сценария ONE, который я хочу запустить. Но если мои потребности станут более сложными, я обязательно проверю это. Благодарю. – AreusAstarte

ответ

4

Ваш скрипт, как и в вашем примере, будет выполнен по вашей продаже, а не на экране. Вам нужно сказать текущему экрану, чтобы прочитать файл и выполнить его - для этого используется опция -X.

Попробуйте

tempfile=$(mktemp) 
cat > $tempfile <<EOF 
cd ~/servers/StarMade/ 
sh StarMade-dedicated-server-linux.sh 
EOF 
screen -X readbuf $tempfile 
screen -X paste . 
rm -f $tempfile 

Вы можете оставить экран работает на 2-ой сессии терминала, чтобы увидеть, что происходит.

+0

Эй, спасибо за быстрый ответ. Несколько вопросов. Во-первых, что это за EOF, что вы там делаете? А во-вторых, экран -X присоединяет команду к сеансу работы экрана, верно? Мне не нужно указывать, какой из них? И наконец, когда я закончил с этим, что мне нужно изменить в моем сценарии? Или откуда я его сейчас запускаю? – AreusAstarte

+3

Элемент EOF - это * здесь документ *, что означает, что все между << EOF и EOF будет помещено в стандартный ввод 'cat', который записывает его в файл temp. Во-вторых, -X выберет тот же экран, что и -r, но вы можете комбинировать -X с -r, чтобы выбрать конкретный. В-третьих, вы заменяете свой полный скрипт моим и запускаете его на компьютере, на котором работает экран. –

+0

Ах. Вау. Это круто: o Спасибо за вашу помощь, это работает как шарм :) – AreusAstarte

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