1

У меня есть веб-сервер с моей жестко запрограммированной веб-панелью для управления исходным сервером, и у меня есть VPS на CentOS, который на самом деле не хочет выполнять скрипт sh при запросе с удаленного сервера.

Веб-сервер и CentOS Server не находятся на одном сервере !!!

Я получил этот сценарий SH:

#! /bin/bash

SERVER_PORT="xxxx"
SERVER_IP="xxxx"
SERVER_MP="xxxx"
SERVER_MAP="xxxx"
SERVER_GAME="xxxx"

# CODE

OLDID=`cat pid_file 2> /dev/null`
if [ "$OLDID" != "" ]; then
    screen -X -S $OLDID quit
    rm -f pid_file
    sleep 1
fi

if [ "$1" != "stop" ]; then
    PORT_CHECK=`netstat -tuln | grep $SERVER_PORT`
    if [ "$PORT_CHECK" == "" ]; then
        UNIQID=`date +%Y%M%d%H%M%S`
        echo $UNIQID > pid_file
        screen -A -m -d -S $UNIQID ./srcds_run -console -game $SERVER_GAME -ip $SERVER_IP -port $SERVER_PORT -maxplayers $SERVER_MP +map $SERVER_MAP
        echo "true"
    else
        echo "false"
    fi
fi

И я получил этот скрипт PHP, который выполняет скрипт выше:

include('classes/ssh.class.php');
$ssh = new SSH2($ssh_server, $ssh_port); 
if (!$ssh->auth($ssh_user, $ssh_password))
die('nologin');
$ssh->exec("sh /home/...../...../za.sh");
echo $ssh->output(); 
die();

Это то, что я получаю на $ ssh-> output()

Сеанс экрана не найден. правда

Когда выполняется скрипт, pid_file не создается, сервер не запускается, и ничего не работает, кроме этого глупого предупреждения.

Что я делаю неправильно?

UPD: Когда я выполняю этот скрипт через консоль SSH (Putty), все работает: файл создается, и сервер запускается в сеансе экрана. Когда я выполняю тот же скрипт через класс PHP ssh, он не работает должным образом.

UPD2: и Putty, и PHP-скрипт входят в систему как пользователь без полномочий root. Игровой сервер не нуждается в запуске от имени пользователя root.

1 ответ1

1

Попробуйте это (используя phpseclib, чистую реализацию PHP SSH):

$ssh = new Net_SSH2($ssh_server, $ssh_port);
if (!$ssh->login($ssh_user, $ssh_password))
die('nologin');
//$ssh->enablePTY();
echo $ssh->exec("sh /home/...../...../za.sh");
die();

Если это не сработает, попробуйте раскомментировать $ssh->enablePTY()

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .