forever、bash、apache 和 php 的奇怪行为

forever、bash、apache 和 php 的奇怪行为

我正在使用 运行一些 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

当我以用户身份从 shell 执行脚本时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>";

当我通过 Web 浏览器执行它时(使用上面的 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在脚本中添加了 a 来检查是否如此,结果确实如此)。

我是不是漏掉了什么?这是一个永久的错误吗?

任何帮助都感激不尽。

更新:我尝试echo $HOME在 bash 脚本中添加,但它没有返回任何内容。PHP 本身是否会清除www-data用户的 home path 环境变量?

答案1

好吧,我终于找到了解决方案。

实际上,Apache 取消了$HOME环境变量的设置,(参见/etc/apache2/envvar文件 第 4 行unset HOME:)

唯一要做的就是添加:

export HOME=/var/www

forever list在 Bash 脚本中的行之前。

而且效果非常好。

相关内容