2011-09-27 54 views
3

我需要一種可靠的方法來檢查通過twistd(和TAC文件)啓動的基於Twisted的服務器是否成功啓動。它可能會失敗,因爲某些網絡選項設置錯誤。由於我無法訪問twistd日誌(因爲它被記錄到/ dev/null,因爲我不需要log-clutter twistd產品),所以我需要確定服務器是否在啓動腳本中成功啓動, -呼叫。檢查是否成功啓動了Twistedd Twisted Server

推出腳本是bash腳本是這樣的:

#!/usr/bin/bash 
twistd \ 
    --pidfile "myservice.pid" \ 
    --logfile "/dev/null" \ 
    --python \ 
    myservice.tac 

所有我在網上找到一些hacks using ps or stuff like that。但我不喜歡這樣的方法,因爲我認爲它不可靠。

所以我在想如果有一種方法來訪問Twisted的內部,並獲得所有當前正在運行Twisted應用程序?這樣我就可以查詢當前運行的應用程序中我的Twisted應用程序的名稱(就像我在TAC文件中命名的那樣)以開始。

我還想着不使用twistd來執行,而是執行基於Python的啓動腳本,包括twistd來的內容,像the answer to this question provides,但我不知道是否可以幫助我得到服務器的狀態跑步。

所以我的問題只是:是否有一個可靠的不醜的方式來告訴如果twistd啓動Twisted Server成功啓動,當twistd日誌記錄被禁用?

回答

5

您明確指定了一個PID文件。 twistd會將其PID寫入該文件。您可以檢查系統以查看是否存在具有該PID的進程。

您還可以使用自定義日誌觀察程序重新啓用日誌記錄,該日誌觀察程序僅記錄啓動事件並放棄所有其他日誌消息。然後,您可以觀看啓動事件的日誌。

另一種可能性是將另一臺服務器添加到您的應用程序中,從而暴露您提到的內部組件。然後嘗試連接到該服務器,並四處看看你想看到什麼(只是服務器正在運行的事實似乎是一個很好的跡象表明,該過程啓動正常,但)。如果你使它成爲一個人孔服務器,那麼你就可以評估任意Python代碼,它可以讓你檢查你想要的過程中的任何狀態。

你也可以讓你的應用程序代碼寫出一個額外的狀態文件,明確指出成功啓動。確保在開始應用程序之前將其刪除,並且您將具有成功與失敗的良好指標。