shell_exec()不执行shell脚本

时间:2018-01-07 15:33:54

标签: php bash shell

我在GPUImageMovie文件夹中的shell_test.php文件中包含以下代码:

/var/www/html
同一文件夹中的

config.sh 包含以下代码:

<?php
    shell_exec('/var/www/html/config.sh');
?>
  • 当我从文件夹运行#!/bin/sh sudo -u root kill -SIGHUP $(cat /var/www/html/mosquitto/mosquitto.pid) 时,它会运行。
  • 当我在终端中直接在 config.sh 文件中运行命令时,它 也有效。

我已将此添加到 sudoers 文件中,因此无需密码:

./config.sh

在上述两种方式中使用终端运行时,它的工作正常。为什么在PHP中运行时不执行?

3 个答案:

答案 0 :(得分:0)

您的问题可能是apache,www-data或其他正在运行您的脚本的用户,并尝试以root身份运行它。

尝试不使用sudo -u root,并使用以下命令将文件组更改为www-data:

chown root:www-data your-script

答案 1 :(得分:0)

正如你所说&#34;它不会输出任何东西,但我的蚊子经纪人每次运行都会重置,这让我知道&#34;

我认为你应该替换

shell_exec('/var/www/html/config.sh');

$output = shell_exec('/var/www/html/config.sh');
echo $output;

根据php docs&#34; shell_exec - 通过shell执行命令并将完整输出作为字符串返回&#34;

shell_exec默认不打印;你必须存储字符串输出然后使用它

答案 2 :(得分:0)

我在代码中做了一些更改,但它确实有效。

shell_test.php中,我改变了这样的代码:

<?php
    shell_exec('sudo -S ./config.sh');
?>

config.sh中,我改变了这样:

#!/bin/sh
sudo kill -SIGHUP $(cat /var/www/html/mosquitto/mosquitto.pid)