Я понял, как сделать некоторые сценарии оболочки на моем сервере CentOS 6.6 и запустить их с веб-страницы PHP. Моя единственная проблема заключается в том, что один из этих сценариев (используемый для запуска игрового сервера) фактически не прекращается. Я имею в виду, если я выполнил его с терминала SSH, сценарий запускается, и игровой сервер запускается, но он никогда не возвращается в bash, поэтому я могу ввести новую команду.
Если я хочу ввести новую команду (т.е. остановить сервер или выйти из терминала), я должен нажать Ctrl + C.
Моя проблема заключается в том, что страница PHP никогда не останавливает "загрузку". После запуска скрипта со страницы запускается игровой сервер, но страница продолжает загружаться. Как я могу избежать этого?
Я думаю, что могу поместить 10-секундный таймер в свой сценарий оболочки, а затем сделать что-то вроде Ctrl + C, чтобы сообщить моему скрипту PHP, что он закончил выполнение скрипта, но я не знаю, возможно ли это или как это сделать.
Здесь сценарий оболочки для запуска игрового сервера:
#!/bin/sh
cd /home/user/serverfiles/
./serverstart "$@"
И вот как я запускаю его на своем сайте:
$ip = '192.168.0.30';
$user = 'user';
$pass = 'password';
$connection = ssh2_connect($ip);
ssh2_auth_password($connection,$user,$pass);
$stream = ssh2_exec($connection, 'stop');
$errorStream = ssh2_fetch_stream($stream, SSH2_STREAM_STDERR);
stream_set_blocking($errorStream, true);
stream_set_blocking($stream, true);
echo "Output: " . stream_get_contents($stream);
echo "Error: " . stream_get_contents($errorStream);
fclose($errorStream);
fclose($stream);
Есть идеи?
Попробуйте заменить
./serverstart "$@"
от
./serverstart "$@" &
./serverstart "$@" &
же самое с./serverstart "$@" &
./serverstart "$@" >/dev/null 2>&1 &