2011-12-16 45 views
1

我正在做一個掃描服務器爲我的公司,將被用於從工具(如Nessus)啓動掃描,NMAP,日高等我寫在PHP的頁面,但是我需要控制後續進程(由nohup產生並且與&一致),因爲我需要在掃描完成後執行各種操作(例如發送電子郵件,從nessus服務器下載報告等)。如何從PHP腳本蟒蛇守護溝通

我被建議在這裏創建一個PHP頁面進行通信的python守護進程。我已經無休止地搜索了,但從初學者的角度來看,我找不到任何解釋溝通背後的邏輯的東西(對守護程序進行編碼將成爲我最先進的項目)。例如,我知道IPC和unix域套接字,但不知道如何在我的情況下使用它們。因此,我接受了一些建議或指導,瞭解我應該做什麼。

我想我可以創建一個while循環不斷地檢查,看看是否進程已結束,當它,執行相應的後處理終止操作python腳本。該腳本將被守護進程,所以它在後臺運行,我會從PID頁面調用它,並將PID作爲參數,我可以使用argparse模塊訪問該參數。

我在邏輯上是否在正確的線上 - 還是有更好的解決方案?

任何幫助,或只是谷歌,非常感謝!由於

+0

搜索「php作業隊列」 – goat 2011-12-16 19:27:27

回答

5

我認爲像gearman肯定會更容易實現這一點。

的Gearman是一個工作的服務器,它可以讓你開始工作,查詢如果作業仍在運行並獲取作業的輸出(如文本)。

它支持PHP和Python等等。

(這個答案讓我覺得自己像個推銷員)。

1

所以,你的計劃是:PHP派生NMAP &看門狗。看門狗繼續輪詢nmap以完成運行,然後完成一些後處理。

稍微乾淨是: PHP生成一個「進程管理器」(你也寫一個)。這個進程管理器基本上是一個在子進程中執行nmap的程序,等待這個子進程完成(使用'wait'系統調用,例如在C中看起來像:http://linux.die.net/man/2/wait),並進行後處理。

這也將是更有效,因爲「等待」可能比如果PID已終止反覆檢查更便宜。

如果你喜歡蟒蛇比C,Python有子管理太: http://docs.python.org/library/subprocess.html

+0

這聽起來很有趣 - 但是,設計規範的一部分是,有代碼監視從PHP頁面產生的進程數 - 所以在x數量之後不允許創建更多直到一些完成,以幫助減少服務器負載。從你所說的話來看,似乎每次都會產生一個新的流程管理器,那麼上述可能會發生嗎?或者我需要流程經理流程經理^^ - 謝謝! – Jingo 2011-12-16 18:01:32

+0

'進程管理器'基本上大部分時間都在睡覺。因此,如果設計規範的目的純粹是爲了確保服務器不會過載,那麼就不應該計算「進程管理器」實例。但是,工人處理者應該是。 – ArjunShankar 2011-12-18 16:41:17