Я запускаю некоторые сценарии 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
?