前言#
在 Linux 環境下,服務管理通常需要透過指令手動啟動、停止或重啟。然而,這樣的方式不僅繁瑣,還可能導致操作錯誤。Supervisor 是一款以 Python 開發的進程管理工具,專為監控與管理服務設計,並提供 Web 介面,讓使用者能夠輕鬆管理各種應用程式。
本篇文章將介紹如何安裝與設定 Supervisor,並示範如何透過它來管理 Flask + Gunicorn 應用程式。
安裝 Supervisor#
Supervisor 提供兩種安裝方式,可根據需求選擇:
- 使用 APT 套件管理工具安裝(適用於 Ubuntu)
sudo apt-get install supervisor
- 透過 Python 的 pip 安裝
pip install supervisor
設定 Supervisor#
安裝完成後,需要建立 Supervisor 的設定檔,可透過以下指令生成:
echo_supervisord_conf > /etc/supervisor.conf
若想了解設定參數,請參考 官方文件。
啟用 Web 介面#
Supervisor 預設不開放 Web 管理介面,需手動啟用:
[inet_http_server] ; 預設為停用狀態
port=*:9001 ; 允許所有 IP 訪問
;username=user ; 設定管理帳號(可選)
;password=123 ; 設定管理密碼(可選)
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; Unix Socket 連線
serverurl=http://0.0.0.0:9001 ; HTTP 介面
設定進程管理#
為了方便管理不同的應用程式,可以將設定檔拆分至 /etc/supervisor.d/ 目錄中:
1. 修改 /etc/supervisor.conf#
在底部新增:
[include]
files = /etc/supervisor.d/*.ini ; 匯入 .ini 格式的設定檔
2. 建立 Supervisor 配置目錄#
cd /etc
sudo mkdir supervisor.d
啟動 Supervisor#
完成設定後,可透過以下指令啟動 Supervisor:
supervisord -c /etc/supervisor.conf
然後在瀏覽器輸入 http://

透過 Supervisor 管理 Flask + Gunicorn 應用程式#
1. 安裝必要套件#
pip install flask gunicorn
2. 建立 Flask 應用程式#
# myapp.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Hello World"
if __name__ == '__main__':
app.run(debug=True)
3. 測試應用程式#
python myapp.py
連到此網址 http://127.0.0.1:5000/ 確保應用程式正常運行。
設定 Supervisor 管理應用程式#
每個應用程式的 Supervisor 設定檔應放置於 /etc/supervisor.d/ 目錄,以下為 myapp.ini 的範例設定:
[program:myapp]
command=/home/user/myproject/venv/bin/gunicorn -w 4 -b 0.0.0.0:5001 myapp:app
directory=/home/user/myproject
autostart=true
autorestart=true
stdout_logfile=/home/user/log/gunicorn.log
stderr_logfile=/home/user/log/gunicorn.err
參數說明:
- [program:myapp]:定義應用程式名稱。
- command:執行 Gunicorn 伺服器。
- directory:指定應用程式目錄。
- autostart:Supervisor 啟動時自動啟動應用程式。
- autorestart:應用程式異常終止時自動重新啟動。
- stdout_logfile & stderr_logfile:設定日誌輸出位置。
重新啟動 Supervisor#
supervisord -c /etc/supervisor.conf
此時,可在 Supervisor Web 介面中看到 myapp 服務。
並透過 Tail -f stderr 查看 Gunicorn 的日誌輸出

結論#
Supervisor 提供了一個強大的方式來管理 Linux 上的服務,使應用程式能夠自動啟動、監控與重啟。透過 Web 介面或 supervisorctl 指令,可簡單地管理多個應用程式,適合需要長時間運行的服務,如 Web 伺服器、爬蟲、排程任務等。
