2011-12-16 22 views
1

私の会社のスキャンサーバーを作っています。これは、nessus、nmap、niktoなどのツールからスキャンを開始するために使用されます。私はPHPスキャンが完了したら(メールを送信したり、nessusサーバーからレポートをダウンロードするなど)、さまざまなアクションを実行する必要があるため、後続のプロセス(nohupで生成され、&でバックグラウンド化されたプロセス)を制御する必要があります。PHPスクリプトからPythonデーモンと通信する方法

ここでは、PHPページと通信するPythonデーモンを作成することをお勧めしました。私は無限にグーグルで行きましたが、初心者の視点からのコミュニケーションの背後にある論理を説明するものは何も見つかりませんでした(デーモンのコーディングは私の最も進んだプロジェクトです)。私はIPCとUnixドメインソケットを認識していますが、自分の状況でどのように使用できるかはわかりません。そういうわけで、私は何をすべきかについての助言や指針を守っています。

私は、whileループを使ってPythonスクリプトを作成して、プロセスが終了したかどうかを常にチェックし、適切なポストプロセス終了アクションを実行することができると考えていました。スクリプトはデーモン化されてバックグラウンドで実行されるので、PHPページからパラメータとしてPIDを呼び出すことになります。たとえば、argparseモジュールでアクセスできます。

私は論理の面で正しい線になっていますか?それとも良い解決策がありますか?

Googleの何か助けや、何かが大変ありがとうございます。ありがとう

+0

"php job queue"を検索 – goat

答えて

5

私はgearmanのようなものは確かに、それは簡単にこれを実装することになるだろうと思います。

Gearmanは、ジョブを開始したり、ジョブがまだ実行中であるかどうかを問い合わせたり、ジョブの出力を(テキストとして)取り出すことを可能にするジョブサーバーです。

これはPHPとPythonをサポートしています。

(この回答は私をセールスマンのように感じました)。

+0

私はこれを調べます - ありがとう! – Jingo

+0

+1。これは明らかにこれを行う良い方法です! – ArjunShankar

+0

私がうまく使用したもう一つの良いものは、豆腐です。 –

1

あなたの計画は:PHPはnmap &ウォッチドッグをspawnします。ウォッチドッグはnmapのポーリングを継続して実行し、実行後に後処理を行います。

少しきれいになります: PHPは 'プロセスマネージャー'(あなたも書いています)を生成します。このプロセスマネージャは、基本的には、子プロセスでnmapを実行し、この子プロセスが終了するのを待ちます(例えばCのような 'wait'システムコールを使用して、http://linux.die.net/man/2/waitのように)、後処理を行います。

これは、PIDが終了したかどうかを繰り返し確認するよりも、「待機」がおそらく安くなるため、より効率的になります。

Cよりもあなたのpythonのような多くの場合、Pythonはあまりにもサブプロセス管理を持っています http://docs.python.org/library/subprocess.html

+0

これは興味深いですが、設計仕様の一部は、PHPページから生成されたプロセスの数を監視するコードがあるためです。いくつかの作業が完了するまで、サーバーの負荷を軽減するのに役立ちます。新しいプロセスマネージャーが毎回産み出されているように思われるから、上記は可能でしょうか?または、プロセスマネージャーが必要ですか?^^ - ありがとう! – Jingo

+0

「プロセスマネージャー」は、基本的にほとんどの時間スリープ状態です。したがって、設計仕様の意図が純粋にサーバーが過負荷にならないようにするには、 'プロセスマネージャー'インスタンスを数えないでください。しかし、ワーカー・プロセッサーは、そうでなければなりません。 – ArjunShankar

関連する問題