2017-01-28 14 views
0

私はこれが本当に簡単だと思ったが、明らかにそうではないと思った。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として実行されています。

だから私は立ち往生しています。シンプルなことです - デーモンに '起床'と言うシグナルを送りましょう。しかし、私はそれを行う方法を見つけることができません。

答えて

0

非常に奇妙な、再起動後、他の変更は、sudoのアプローチが突然働いた後。概要:

  1. が/ usr/local/binにある(pkillコマンド)コマンド
  2. 場所を含むスクリプトを作成し、(このコマンドのsudoersファイルには/ etc/sudoersファイルに新しいファイルをWWW-データを追加
  3. 実行可能にします.d)
  4. システムからのPHP Apacheスクリプトからの呼び出し( "sudo/usr/local/bin/script_ name")
関連する問題