Supervisord

最後更新: 2021-04-12 21:19:10 +0800 +0800
原文以英文撰寫。您正在閱讀AI翻譯版本。

Supervisor 是適用於類 Unix 主機的程序控制系統。它會啟動已設定的程式、擷取其輸出、在適當時重新啟動程式,並公開控制介面。當應用程式需要輕量且明確的程序管理員時,Supervisor 很實用;但它不能取代作業系統的 init 系統或服務管理員。

定義程式 #

最小的程式定義應放在 Supervisor 包含的設定目錄中:

ini
[program:worker]
command=/opt/app/bin/worker --queue=default
directory=/opt/app
user=app
autostart=true
autorestart=unexpected
startsecs=5
stopasgroup=true
killasgroup=true
stdout_logfile=/var/log/app/worker.log
stderr_logfile=/var/log/app/worker-error.log

startsecs 可避免立即結束的程序被回報為成功啟動。stopasgroup 與 killasgroup 有助於確保子程序在重新啟動期間收到終止訊號。以非特權使用者執行服務,並只授予它所需的檔案系統存取權。

套用與檢查設定 #

變更設定後,請明確重新載入:

sh
supervisorctl reread
supervisorctl update
supervisorctl status
supervisorctl tail -f worker stderr

reread 會探索設定變更;update 會新增、移除或重新啟動受影響的程式。使用 supervisorctl restart worker 進行刻意的重新啟動,並先檢查記錄,再增加重試次數。

容器與服務管理員 #

在單一程序容器中,直接將應用程式作為 PID 1 執行,並讓編排器處理重新啟動。僅為了執行一個程序而加入 Supervisor,會使訊號與結束狀態變得不明確。對傳統主機而言,若平台服務管理員(例如 systemd)的相依性處理、cgroup 整合與記錄功能符合需求,請優先使用它。當 Supervisor 的簡單程式模型正好符合操作邊界時,才使用 Supervisor。

評論

在 GitHub 上閱讀或評論(發表評論需要登入)