我在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(我的用户名),但没有运气。我做错了什么?
答案 0 :(得分:1)
/home/rohit
和notify-send
命令...
eighter为nginx用户提供执行这些命令和脚本的权利,或者将他们移动到他有权访问的位置。
答案 1 :(得分:1)
问题是您正在从服务运行notify-send。 Notify-send是一个面向桌面的程序,它与显示器交互。但是nginx在没有附加到显示器的情况下运行。
想象一下,例如,有3个人同时登录到计算机,所有人都有不同的显示。当notify-send运行时,它不知道将通知发送到哪个显示器。
答案 2 :(得分: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
执行此操作时请注意安全问题。