私はこれが本当に簡単だと思ったが、明らかにそうではないと思った。Apache PHPスクリプト(Ubuntu 14.04)からデーモンにシグナルSIGUSR1を送るには
私はデーモンを持っています(実際は通常の実行可能ファイルとして現在テストされています)。ウェブページから何をするかを制御する必要があります。真ん中に座っているのは、両方向に渡されるすべての必要なデータを含むMySQLデータベースです。すべて同じマシン上にある。
Webページからコマンドが発行されると、PHPは適切なデータをデータベースに格納し、デーモンはそれを読み取り、動作します。ここまでは順調ですね。
しかし、デーモンはデータベースをポーリングするため、タイムラグがあります。私がしたいことは、デーモンに「今見て」と言うメッセージを送ることです。だから私はそれにシグナルを送ると思った - SIGUSR1。
これは、シグナルがコマンドライン(kill -SIGUSR1 ....)から送信され、PHPシステム( "kill -SIGUSR1 ....")から送信された場合には問題なく動作します。
だから、私は思った - 内部シェルコマンドは、シェルスクリプトには、killコマンドを置く。コマンドラインから実行するとうまく動作しますが、Apache PHP system()APIからはうまく動作しません。
PHP posix_kill()を使って同じことを試しましたが、失敗しました。
権限の問題として表示されます。 Apacheスクリプトユーザーにはkillコマンドを発行する権限がありません。だから私は、OKと思った。とにかくテストのためだけにスクリプトを書く。あなたはSUIDスクリプトを使うことができないので、それが表示されます。
したがって、sudoのパスワードプロンプトが表示されないように、system()呼び出しのスクリプトをsudoし、スクリプトとuser(www-data)を/etc/sudoers.dに追加します。スクリプトのkillコマンドまたはpkillコマンドは、コード1(許可が拒否されました)で戻ってきますが、rootとして実行されています。
だから私は立ち往生しています。シンプルなことです - デーモンに '起床'と言うシグナルを送りましょう。しかし、私はそれを行う方法を見つけることができません。