【问题标题】:Issues With PHP exec & shell_exec - Shell Script ExecutionPHP exec 和 shell_exec 的问题 - Shell 脚本执行
【发布时间】:2026-02-09 15:25:02
【问题描述】:

我无法运行 php 脚本,我需要使用这些脚本来启动和停止在本地计算机上运行的带有脚本的网络摄像头服务。我在日志中找不到任何内容来表明脚本为什么不起作用。

我承认自己在 PHP 方面存在严重缺陷,尤其是服务器端脚本。

环境是运行 Nginx 的 Debian Jesse,安装了所有必需的 SSH 和 PHP 模块

我已将 www-data 添加到 sudoers 文件中:

    www-data ALL=(ALL) NOPASSWD: /var/www/html/start_webcam.sh

为 www-data 启用 $PATH 环境:

    /etc/php5/fpm/pool.d/www.conf

shell 脚本位于 .../html 目录中,可以从终端运行,没有任何问题。

这是 php 和 shell 脚本的代码:

start_webcam.php:

    <?php
    echo exec('sudo bash /var/www/html/aspirebox/start_webcam.sh 2>&1, $output');
    print_r($output);
    ?>

$output 和 print_r 的东西在那里,因为这是我根据我在这里某处发现的帖子尝试的最后一件事。

start_webcam.sh

    #!/bin/bash
    service motion start

提前感谢这里有线索的任何人。经过两天的努力,我确信我没有。

【问题讨论】:

    标签: php linux bash shell nginx


    【解决方案1】:

    根据Passing Variables to shell_exec()?,您应该像这样更改您的代码:

    <?php
    $output = exec('/var/www/html/aspirebox/start_webcam.sh 2>&1 ');
    print_r($output);
    ?>
    

    并让您的 bash 脚本全部执行(无需 sudo bash):

    chmod a+x /var/www/html/aspirebox/start_webcam.sh
    

    【讨论】:

      【解决方案2】:

      非常感谢 - 成功了。

      我通过直接获取 shell 脚本运行所在目录的路径,以及运行“服务”的正确路径。

      我现在要做的就是弄清楚为什么我会收到“无法启动 motion.service:访问被拒绝”

      我已授予 www-data 权限,无需密码即可在 sudoers 上运行脚本,必须继续挖掘。

      再次感谢!

      【讨论】: