comportamento estranho com forever, bash, apache e php

4

Estou executando alguns scripts node.js com forever .

Eu os iniciei como www-data user (ou seja, via ssh logging como www-data @ server e digitando forever start myapp.js , etc.).

Ok, tudo é como um encanto; meu aplicativo funciona como esperado e digitar forever list mostra os processos em execução.

Em seguida, escrevi um script (muito simples) chamado foreverList.sh e coloquei na pasta /var/www/scripts/ :

#!/bin/bash

echo "checking running node.js scripts:"
forever list

Quando executo o script do shell como www-data user, ele funciona. Nada extravagante aqui. Mas, este script deve ser usado com o PHP 5.6 através do Apache 2.4, com:

<?php
// ....
$resp_script = shell_exec("/var/www/scripts/foreverList.sh 2>&1");
echo "<pre>$resp_script</pre>";

E quando eu o executo via meu navegador (assim com o código PHP acima), ele não funciona !! Eu recebo esta mensagem de erro forever (nodejs, não php):

/usr/lib/node_modules/forever/lib/forever.js:674
procs.forEach(function (proc) {
^
TypeError: Object Error: EACCES, permission denied '/root/.forever/sock' has no method 'forEach'
...
... #(stack trace follows)

Eu realmente não entendo por que ele lida com a pasta / root, já que estou executando todas essas coisas da pasta / var / www / e como www-data user (adicionei um whoami no script para verificá-lo foi o caso, e isso acontece).

Eu sinto falta de algo? É um bug para sempre?

Qualquer ajuda será muito apreciada.

UPDATE : tentei adicionar echo $HOME no script bash e ele não retorna nada. O próprio PHP apaga a variável de ambiente do caminho inicial de www-data user?

    
por Polosson 26.11.2014 / 02:34

1 resposta

3

Bem, finalmente encontrei a solução.

Na verdade, o Apache não definiu a variável de ambiente $HOME (consulte a linha 4 do arquivo /etc/apache2/envvar : unset HOME )

A única coisa a fazer foi adicionar:

export HOME=/var/www

antes da linha forever list no script bash.

E funciona como um encanto.

    
por 02.12.2014 / 18:28