4

Я запускаю некоторые сценарии node.js с forever .

Я начал их как пользователь www-data (т.е. через ssh, регистрируясь как www-data @ server и печатая forever start myapp.js и т.д.).

Хорошо, все идет как очарование; мое приложение работает, как и ожидалось, и forever list показывает мне запущенные процессы.

Затем я написал (очень простой) скрипт с именем foreverList.sh и поместил в папку /var/www/scripts/ :

#!/bin/bash

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

Когда я выполняю скрипт из оболочки как пользователь www-data , он работает. Здесь нет ничего особенного. Но этот сценарий должен использоваться с PHP 5.6 через Apache 2.4 с:

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

И когда я выполняю его через свой веб-браузер (так с кодом PHP выше), это не работает !! Я получаю это сообщение об ошибке forever (nodejs, а не 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)

Я действительно не понимаю, почему он работает с папкой /root, так как я запускаю все это из папки /var /www / и как пользователь www-data (добавил в сценарий whoami чтобы проверить, что это так, и оно делает).

Я что-то пропустил? Это навсегда ошибка?

Любая помощь будет высоко ценится.

ОБНОВЛЕНИЕ : я попытался добавить echo $HOME в скрипт bash, и он ничего не возвращает. Стирает ли сам PHP переменную окружения home path пользователя www-data ?

1 ответ1

3

Ну, я наконец-то нашел решение.

На самом деле Apache сбросил переменную окружения $HOME (см. Строку 4 файла /etc/apache2/envvar : unset HOME)

Единственное, что нужно сделать, это добавить:

export HOME=/var/www

перед строкой forever list в скрипте bash.

И работает как шарм.

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