2010-08-01 172 views
6

我想守護一個python進程,現在想問一下是否有一個守護進程運行的好習慣,就像父進程一樣,並調用另一個可以打開10-30個線程的類。Python守護進程

我打算爲一組服務器編寫一個監視腳本,並希望每隔5分鐘檢查一次每臺服務器,確認每臺服務器正好5分鐘檢查一次。

我想有這種方式(在某種程度上講,PS auxf風格輸出):

|monitor-daemon.py 
\-check-server.py 
\-check-server.py 

....

謝謝!

回答

1

您可以使用supervisord這一點。您可以配置任務以響應事件。這些事件可以手動創建,也可以通過監視進程自動創建,也可以定期進行。

它是完全可定製的,並用Python編寫。

例子:

[program:your_daemon_name] 
command=your_daemon_process 
# Add extra options here according to the manual... 

[eventlistener:your_monitor_name] 
command=your_monitor_process 
events=PROCESS_STATE_RUNNING # Will be triggered after a program changes from starting to running 
# Add extra options here according to the manual... 

或者,如果你想要的事件監聽響應過程輸出使用事件PROCESS_COMMUNICATION_STDOUTTICK_60爲每分鐘檢查。日誌可以重定向到文件等,所以你可以隨時查看狀態。

+0

謝謝,但這看起來像是一個矯枉過正的(此時) - 如果你有以下任何建議: (對不起,如果重複自己) - 守護進程已啓動,檢查是否一切正常 - 調用(示例)MyMonitor()。check() - MyMonitor.check()有任務 - 從數據庫獲取數據(SQLite/MySQL) - 傳遞數據併爲每個數據條目打開線程 - 基於輸出進一步的行動在那裏(失敗的端口 - 發送電子郵件) - 關閉創建主題 對不起,這樣n00bish風格,但要檢查是否一切就位,在使用額外的模塊之前。 – abiko 2010-08-01 22:13:03

+0

我已經添加了一個例子abiko,也許這將有所幫助。請參閱文檔以獲取示例事件偵聽器:http://supervisord.org/events.html#example-event-listener-implementation – Wolph 2010-08-02 15:00:00

+0

是的,supervisord太過複雜且過於複雜。按照備用答案中的建議,最好使用http://pypi.python.org/pypi/python-daemon。 – aculich 2011-12-04 11:12:51

8
+0

是的,使用python-daemon而不是supervisord! python-daemon實現了PEP 3143「標準守護進程庫」的行爲良好的守護進程規範:http://www.python.org/dev/peps/pep-3143/ – aculich 2011-12-04 11:13:31

+0

你仍然可以使用監督器和python守護進程;-) – Stefano 2012-08-31 08:20:20

-1

確實沒有太多的創建自己的daemonize功能:Unix環境下的高級編程源碼(第二版)免費提供:http://www.apuebook.com/src.tar.gz - 您正在尋找apue.2e/daemons/init.c文件。

有一個small helper program可以完成所有創建正確的守護進程的工作,它可以用來包裝任意程序;這可能會節省一些麻煩。