Собственно проблема:
ОС: FreeBSD 7.2
Версия screen 4.0.3
Есть некоторый консольный сервер, запускаемый из .sh файла. При запуске такового, есть доступ к консоли для введения простых команд, таких как quit и restart.
Есть веб сервер, с php и с установленно библиотекой для работы с SSH2 протоколом. Задача, чтобы запустить консольный сервер в фоне и иметь возможность ввода команд я запускаю его через screen. Вот содержание(manage.sh):
Код: Выделить всё
#!/bin/sh
#vsftpd &
if [ ${1} = "start" ]
then
cd /home/raytracer/server/
/usr/local/bin/screen -A -m -d -S sess ./server_run -verbose
elif [ ${1} = "stop" ]
then
/usr/local/bin/screen -rd sess -X eval 'stuff quit\015'
elif [ ${1} = "restart" ]
then
/usr/local/bin/screen -rd sess -X eval 'stuff restart\015'
else
action="Unknown action"
fi
$cmd = $ssh->exec('/home/raytracer/server/manage.sh start');
Сервер запускается в фоне, сессия скрина sess создается и детачится. Все норм.
Далее я хочу перезагрузить сервер и посылаю команду:
$cmd = $ssh->exec('/home/raytracer/server/manage.sh restart');
тоесть в скрипте исполняется строчка:
/usr/local/bin/screen -rd sess -X eval 'stuff restart\015'
она означает отдетачиться от остальныйх окон и вернуться в сессию скрина sess и затем отослать команду restart и послать нажатие клавиши Enter символом \015. Но сервер не перезапускается - 0 реакции.
НО! Как только я в tty или же через виндосовский ssh клиент pytty отсылаю команду: screen -rd sess
тоесть отдетачиться от остальныйх окон и вернуться в сессию скрина sess, и затем отключаюсь от сессии (ctrl+A +d) и посылаю через вебсервер команду:
$cmd = $ssh->exec('/home/raytracer/server/manage.sh restart');
Сразу происходит перезапуск сервера. Тоесть необходимо 1 раз присоединиться к сессию, затем все идет нормально, но как сэмулировать запуск через вебсервер.
Пробовал посылать команду, которую мне посоветовал один из участников форума - hizel:
screen -rd sess && /home/raytracer/server/manage.sh restart
Ничего не выходит. Как можно найти решение?