首頁 > 軟體

Python程序管理神器Supervisor詳解

2022-07-14 14:02:21

一、簡介

Supervisor 是一款 Python 開發的程序管理系統,允許使用者監視和控制 Linux 上的程序,能將一個普通命令列程序變為後臺守護行程,異常退出時能自動重啟
詳細介紹查閱:Supervisor Introduction

二、安裝

Supervisor 支援 Linux 和 Mac,不支援 Windows
本文系統為: centos,supervisor==4.2.4

pip3 install supervisor

安裝完成後,在Python bin目錄下面會有這樣幾個檔案。

ls /usr/local/Python38/bin

echo_supervisord_conf
supervisorctl
supervisord

注:由於python bin目錄是加入了環境變數,所以可以直接執行這幾個檔案。

三、建立組態檔

1.首先建個目錄,存放組態檔:mkdir supervisord

echo_supervisord_conf > supervisord/supervisord.conf

若報錯 -bash: /etc/supervisord.conf: Permission denied,需要切換到 root使用者。

2.建立子程序組態檔路徑

mkdir -p supervisor/conf.d

後面我們的任務,我們想把它作為守護行程,都需要一個組態檔,我們把這些組態檔放在conf.d目錄下面。

3.修改組態檔

vim supervisord/supervisord.conf

將最後一部分改為

[include]
# 因為我這裡是放在root使用者目錄下,也可以放其它目錄
files=/root/supervisord/conf.d/*.conf

四、初試

1.啟動 supervisord

supervisord -c supervisord/supervisord.conf

這樣就把supervisord啟動了,我們接下來可以把我們的任務交給他去守護了,停止了會幫我們自動重啟。

檢視版本

supervisord -v

2.編寫簡單的 Shell 指令碼

vim supervisord/test.sh

內容如下

#!/bin/bash
while : 
do
    echo `date '+%Y-%m-%d %H:%m:%S'`
    sleep 1
done

簡單執行,Ctrl + C 退出

3.建立子程序組態檔

vim supervisor/conf.d/test.conf

test.conf內容如下:

[program:test]
command=sh /root/supervisord/test.sh
priority=999                              ; 相對啟動優先順序,數值越小越優先,預設為999
autostart=true                            ; 在supervisor啟動時自動啟動,預設為true
autorestart=true                          ; 在意外退出時重新啟動,預設為true
startsecs=10                              ; 子程序啟動多少秒後狀態為running則認為啟動成功,預設為1
startretries=3                            ; 嘗試啟動的最大次數,預設為3
exitcodes=0,2                             ; 程序的預期退出程式碼列表,預設為0
stopsignal=QUIT                           ; 終止程序的訊號,預設為TERM
stopwaitsecs=10                           ; 在SIGKILL之前等待的最大秒數,預設為10
user=root                                 ; 在某使用者下設定uid來啟動程式,預設不切換使用者
redirect_stderr=true                      ; 是否重定向stdout和stderr,預設為false
stdout_logfile=/tmp/supervisor.stdout.log  ; stdout的輸出檔案,預設為AUTO
stdout_logfile_maxbytes=50MB              ; stdout最大檔案大小,預設為50MB
stdout_logfile_backups=10                 ; stdout檔案備份數,設為0則不備份,預設為10

其實只需要設定3個引數,其它不用管:

  • command=sh /root/supervisord/test.sh: 我們的子程序啟動命令;
  • stdout_logfile=/tmp/supervisor.stdout.log: 紀錄檔;
  • program:test:程序名為test,如果程序哪一天想停止啟動等,需要程序名;

目前檔案目錄結構是這樣的:

yum install tree
tree supervisord

supervisord
├── conf.d
│   └── test.conf
├── supervisord.conf
└── test.sh

4.重新讀取設定並更新子程序

因為我們的supervisord已經啟動了,可以通過ps -ef | grep supervisord.conf檢視。新增了子程序組態檔,需要把它重新載入進來:

先進入supervisord目錄: cd supervisord,否則執行下面命令會有問題。

supervisorctl reread

再次檢視程序狀態

supervisorctl status

結果:

test     RUNNING   pid 30278, uptime 1:29:41

名為test的這個程序已經作為守護行程在後臺執行,我們來kill掉他:

kill 30278

再執行supervisorctl status,會發現狀態立馬由starting,不一會變成running,那麼supervisord的作用已經很明顯了,可以自動幫我們自動監控任務。

注:對於子程序的新增、刪除、啟動、停止相關命令,見附錄。

五、Web 介面

web介面沒多大用處,就是如果想啟動、暫停程序是,不需要敲命令而已。

vim supervisord.conf

取消註釋

[inet_http_server]
port=*:9001                ; 此處改為*便於偵錯

重啟 supervisord

supervisorctl reload

瀏覽器存取:linux_ip:9001.

附錄:supervisorctl 常用命令

新增某組態檔,重新載入

supervisorctl reread

改動某組態檔,重新載入

supervisorctl update

重啟 supervisord

supervisorctl reload

檢視所有程序狀態

supervisorctl status

檢視指定程序狀態

supervisorctl status <name>

啟動所有子程序

supervisorctl start all

啟動指定子程序

supervisorctl start <name>

重啟所有子程序

supervisorctl restart all

重啟指定子程序

supervisorctl restart <name>

停止所有子程序

supervisorctl stop all

停止指定子程序

supervisorctl stop <name>

新增子程序到行程群組

supervisorctl add <name>

從行程群組移除子程序,需要先stop。注意:移除後,需要使用reread和update才能重新執行該程序

supervisorctl reomve <name>

歡迎存取我的個人部落格,聽聽我的故事。

到此這篇關於Python程序管理神器Supervisor的文章就介紹到這了,更多相關Python Supervisor程序管理內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com