3

UbuntuのNginxでPHP-FPMを使用しています。Web アプリケーションから PHP タスクを起動しようとしています。

次の 2 つの例は、CLI からファイルを実行すると正しく機能しますが、Nginx からは機能しません。

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

これら 2 つは、CLI と Nginx の両方から正しく機能します。

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

PHP-FPM ユーザーを www-data から rohit (私のユーザー名) に変更しようとしましたが、うまくいきませんでした。私は何を間違っていますか?

4

3 に答える 3

1

問題は、サービスから通知送信を実行していることです。Notify-send は、ディスプレイと対話するデスクトップ指向のプログラムです。しかし、nginx はディスプレイに接続されていなくても実行されます。

たとえば、3 人のユーザーが同時にコンピューターにログオンしていて、全員が異なるディスプレイを使用しているとします。notify-send が実行されると、通知を送信するディスプレイがわかりません。

于 2012-10-03T15:42:15.737 に答える
1

propbaly nginxサーバーを実行しているユーザーにはアクセス権がなく/home/rohitnotify-sendコマンド...

これらのコマンドとスクリプトを実行する権限、またはアクセス権のある場所に移動する権限を nginx ユーザーに付与します。

于 2012-10-03T09:07:12.587 に答える
0

標準エラー メッセージがどのように表示されるかを確認します。これは、exec() 関数の 2 番目のパラメーターを指定することで確認できます。

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 に答える