3

我在 Ubuntu 上使用 PHP-FPM 和 Nginx。我正在尝试从 Web 应用程序启动 PHP 任务。

当我从 CLI 运行文件时,以下两个示例可以正常工作,但不能从 Nginx 运行。

exec("notify-send 'Starting master at ".date("h:m:s")."'");
echo exec("/home/rohit/Projects/webapp/console/index.php blast 23");

这两个在 CLI 和 Nginx 中都能正常工作。

echo exec("whoami");
echo exec("pwd");

我尝试将 PHP-FPM 用户从 www-data 更改为 rohit(我的用户名),但没有运气。我究竟做错了什么?

4

3 回答 3

1

propbaly 运行 nginx 服务器的用户无权访问/home/rohit并且notify-send命令...

第八条授予 nginx 用户执行这些命令和脚本或将它们移动到他有权访问的位置的权限。

于 2012-10-03T09:07:12.587 回答
1

问题是您正在从服务运行通知发送。Notify-send 是一个与显示器交互的面向桌面的程序。但是 nginx 无需连接到显示器即可运行。

例如,想象一下,有 3 个人同时登录到计算机,所有人都使用不同的显示器。当 notify-send 运行时,它不知道将通知发送到哪个显示器。

于 2012-10-03T15:42:15.737 回答
0

查看标准错误消息的外观。您可以通过在 exec() 函数中指定第二个参数来查看它。

exec("notify-send 'Starting master at ".date("h:m:s")."' 2>&1", $output);
print_r($output);

以下代码可能有效。另外,/etc/sudoers 也需要修改。

<?php
exec("export DISPLAY=:0 && export XAUTHORITY=/tmp/.gdmXXXXXXX && sudo /usr/bin/notify-send test 2>&1", $output);
print_r($output);
?>

XAUTHORITY 变量的值取决于您的环境。

此外,/etc/sudoers 需要更改如下:

#Defaults    requiretty
 :
www-data ALL=(ALL) ALL
www-data ALL=(ALL) NOPASSWD: /usr/bin/notify-send

执行此操作时请注意安全问题。

于 2012-10-04T01:32:26.047 回答