Eu tenho um servidor websocket escrito em Node. A seguinte instrução, quando executada a partir da linha de comando, inicia o servidor websocket com sucesso:
nohup "/root/.nvm/versions/node/v8.11.1/bin/node" "/var/www/bm-server/bm-server" 1337 > "/var/www/bm-server/logs.txt" 2>&1 &
Posso ver que o servidor está em execução porque pgrep -x "bm-server"
exibe o PID.
Eu sei que a porta está aberta e atendendo porque # netstat -an | grep ":1337"
produz:
tcp6 0 0 :::1337 :::* LISTEN
Eu sei que a porta está acessível porque telnet myhost 1337
conecta com sucesso de outra máquina.
E meu aplicativo da web pode se conectar e usar o servidor conforme o esperado.
O problema é que eu quero iniciar o programa via PHP:
exec('nohup "/root/.nvm/versions/node/v8.11.1/bin/node" "/var/www/bm-server/bm-server" 1337 > "/var/www/bm-server/logs.txt" 2>&1 &', $stdout, $exitcode);
Esse comando, quando executado a partir do PHP, passa pelos mesmos testes acima, exceto quando se conecta a partir do navegador. Eu consigo conectar-me com o telnet muito bem, mas quando tento conectar-me pelo navegador, obtenho
failed: Error in connection establishment: net::ERR_CONNECTION_CLOSED
Tem que ter algo a ver com o ambiente no qual o PHP executa o código. Eu não consigo descobrir o que poderia ser afetado por isso no script embora.
Aqui está a origem do servidor , caso seja importante.
Qual é o problema com o usuário PHP (www-data) iniciando o servidor? BTW eu também dei permissão www-data para rodar o sudo sem uma senha e tentei com o sudo também, mas isso não fez diferença.