echo arquivo “algo” não funciona quando o script sh está sendo executado pelo servidor PHP remoto

1

Eu tenho um servidor web com meu webpanel codificado para o gerenciamento do servidor de origem e tenho meu VPS no CentOS que realmente não quer executar o script sh quando solicitado pelo servidor remoto.

Web-server e CentOS Server não estão no mesmo servidor !!!

Eu tenho este script 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

E eu peguei este script PHP que executa o script acima:

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();

Isto é o que eu recebo em $ ssh- > output ()

No screen session found. true

Quando o script está sendo executado, o pid_file não está sendo criado, o servidor não inicia e nada funciona exatamente, mas esse aviso tolo.

O que estou fazendo de errado?

UPD: Quando executo este script via console SSH (Putty) tudo funciona: o arquivo está sendo criado e o servidor inicia na sessão de tela. Quando executo o mesmo script via PHP, a classe ssh não funciona corretamente.

UPD2: Tanto o Putty quanto o script PHP estão efetuando login no sistema como usuário não root. O servidor do jogo não precisa ser executado como root.

    
por Артём Doe 16.10.2014 / 21:36

1 resposta

1

Tente isso (usando phpseclib, uma implementação PHP SSH pura ):

$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();

Se isso não funcionar, tente remover o comentário de $ssh->enablePTY()

    
por 16.10.2014 / 22:48