Назад | Перейти на главную страницу

Скрипт автоматического перезапуска экрана не работает

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

#!/bin/bash

START='cd /home/test; ./GameServer +set parameters'
SCREEN_NAME="test"


while /bin/true; do


sleep 5
SERVER=`ps --User test | grep GameServer | grep -v grep | wc -l`

 if [[ $SERVER -eq "0" ]]; then
    screen -S $SCREEN_NAME-X quit ; screen -S $SCREEN_NAME -md $START
    sleep 10
 fi
done

Имя процесса - «игровой сервер», и проблема заключается в том, чтобы убить сеанс экрана, потому что он не завершится, и если я убью все сеансы экрана, экран, на котором запущен скрипт, также завершит работу.

test@de:~$ screen -list
There is a screen on:
        31861.2-test    (08/11/13 12:51:06)     (Detached)
1 Socket in /var/run/screen/S-test.

test@de:~$ screen -r 2-test -X quit
No screen session found.
test@de:~$ screen -x 2-test -X quit
No screen session found.
test@de:~$ screen -S 2-test -X quit
No screen session found.

Я могу хотя бы присоединиться к вышеуказанному экрану с помощью «screen -x», и я также могу убить экран с тем же именем, используя приведенные выше команды, если я начну его как: «screen -S test». Я считаю, что в панели управления есть что-то, что запускает его по-другому, так что он не может подключиться с использованием имени.

Да ладно, не используйте для этого экран.

Используйте что-то, что действительно предназначено для наблюдения за процессами, и перезапускайте / возрождайте их, когда они умирают.

Все остальное - это просто изобретение колеса, и никогда не будет так хорошо и проверено.