快轉到主要內容
  1. Posts/

使用 Supervisor 管理 Linux 服務

Linux Python Supervisor Flask Gunicorn Linux Python
目錄

前言
#

在 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://:9001/,即可存取管理介面。

Image


透過 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 服務。

Image

並透過 Tail -f stderr 查看 Gunicorn 的日誌輸出

Image

結論
#

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

Ernie
作者
Ernie

相關文章

Python 虛擬環境設定:使用 virtualenv 與 VSCode
Python 開發環境 Python Virtualenv VSCode 虛擬環境 開發環境 套件管理 Pip
使用 virtualenv 與 VSCode 建立 Python 虛擬環境,提升開發效率。
在 Ubuntu 上設定高效能 uWSGI 伺服器
Python Web Server Ubuntu UWSGI WSGI Python Ubuntu Web Server Nginx Deployment
本文介紹如何在 Ubuntu 上設定 uWSGI 伺服器,並與 Python 應用程式整合,提升效能與穩定性。
PyCharm打包Python程式成EXE教學
Python Python PyCharm PyInstaller 打包
使用PyCharm和PyInstaller將Python程式打包成可執行檔(.exe)的步驟教學。