我如何在 upstart、runit、supervisor、daemontools 之間進行選擇,以便在進程終止時重新啟動該進程? (過程監督/監控)

我如何在 upstart、runit、supervisor、daemontools 之間進行選擇,以便在進程終止時重新啟動該進程? (過程監督/監控)

我有一個 Nginx Web 代理、gunicorn Web 伺服器和一個 python/flask Web 應用程式。 Gunicorn 進程顯然已經死掉了,我想在未來透過研究一個實用程式來改善這種情況,該實用程式可以在 Gunicorn 進程再次崩潰時監視並重新啟動它。

我發現了幾個可以完成這項工作的進程監控實用程式:

  • 守護程式工具
  • 發射
  • 運行
  • s6
  • 導師
  • 系統D
  • 暴發戶

是否有一篇全面的文章比較和對比用於監視和重新啟動進程的各種實用程式?

https://en.wikipedia.org/wiki/Process_supervision

答案1

  • runitdaemontools(兩者都寫在c) 的後繼者

  • supervisord使用python.

我一直在裡面使用同一個作者的runitwithsocklog阿爾卑斯Linux lxc容器大約 10 個月來管理web/ database&各種其他服務。它很輕,易於管理,而且我沒有遇到服務故障。日誌守護程序也以它自己的用戶身份運行,root這很好。

虛空Linux用作runit它的init系統&也用於服務監督(在包樹中搜尋run檔案以取得腳本範例runit)。

答案2

如果您的發行版使用 Upstart,請使用它。它對作業重新啟動有非常基本的支持,但包括可以防止重新啟動循環的限制,如 @EEAA 所提到的。

如果您的作業系統使用其他 init 程序,請不要更改它。我無法真正幫助你使用你提到的其他工具,因為我通常使用 Ubuntu,其中 Upstart 仍然存在(截至最新的 LTS),所以我與它們關係不大。但創建一個運行的簡單腳本並不是一項艱鉅的任務計劃任務每分鐘一次(或更頻繁地在循環中),它可以檢查 PID 是否存在並在失敗時重新啟動。

相關內容