2009-11-26 72 views
1

我有一個用PHP編寫的網站(CakePHP),其中某些資源密集型任務由後臺進程處理。這是通過Beanstalkd消息隊列完成的。我需要一些方法來檢索後臺進程的狀態,以便我可以使用Monit監視它。檢查我的PHP beanstalkd後臺進程的狀態

後臺進程是一個與Beanstalkd進行通信的CakePHP Shell(只是一個PHP CLI腳本)。它只是在Benastalkd上做一個保留(),並等待一條新消息。當它收到消息時,它會處理它。我想用Monit來監視這個過程,以便在出現問題時重啓後臺進程。

我到目前爲止一直在想的是編寫一個PHP CLI腳本,在Beanstalkd中放置一條消息。後臺進程接收消息並以某種方式將其內部狀態傳回給CLI腳本。但是如何?套接字?共享內存?其他一些IPC方法?

或者我可能在這裏太複雜了,是否有更簡單的方法來監控這個過程與Monit?

在此先感謝!

回答

2

這是我最終做的。

CLI腳本連接到beanstalkd,創建一個新的隊列(管)並開始觀察它。然後它會在後臺守護進程正在監視的隊列中放置最高優先級的消息。該消息包含CLI腳本正在監視的新隊列的名稱。

後臺進程幾乎立即收到此消息(因爲它是最高優先級),生成一條狀態消息並將其放入CLI腳本正在監視的隊列中。 CLI腳本接收它並關閉隊列。

當CLI腳本在30秒內未得到響應時,它將退出並顯示一個錯誤,指示後臺守護程序(很可能)已掛起。

我把所有這些都歸入Monit。 Monit現在可以檢查後臺守護進程是否正在運行(通過pidfile和進程列表)並確認它實際上仍在處理消息(通過使用CLI工具來測試它是否響應狀態請求)

1

可能有一個插件讓Monit或Nagios連接,運行統計信息並返回,如果有太多的話。目前還沒有一個'協議'已經寫好,但是對於修改現有的基於文本的協議(如nntp或smtp)來做你想做的事情似乎並不是很難。它的意思是寫它在C中,但它的外觀。

從CLI-PHP腳本中,我將通過兩種不同方法中的一種(或兩種)來解決它。

1將低優先級消息放入隊列中,並確保它在幾秒鐘內恢復。把它放到一個專門的隊列中,並確保沒有任何東西放在那裏之前,那也是一個很好的補充。 2 /執行'統計',看看有多少人在等待:'當前就業準備'。

爲了將信息返回到網站(無論哪種方式),您都可以寫入文件,或者寫入類似Memcached的gts讀取和執行的內容。

+0

不完全是我尋找。你的建議似乎是測試beanstalkd,而不是我使用beanstalkd消息的後臺進程。所以,我需要以某種方式表示我的後臺進程(無論是通過beanstalkd還是使用POSIX信號。我不知道任何其他方式),然後後臺進程需要傳達它的狀態。但是如何? – 2009-11-26 23:35:39