天天看點

supervisor的安裝與使用

    • supervisor是什麼?
    • 安裝supervisor(yum安裝,基于centos)
    • 檔案配置
    • 管理多個程序
    • 啟動、測試
    • web界面操作
    • supervisorctl管理指令
      • 檢視任務狀态
      • 啟動、停止、重新開機任務
      • 重新加載配置檔案

supervisor是什麼?

supervisor是用Python開發的一個client/server服務,是Linux/Unix系統下的一個程序管理工具。可以很友善的監聽、啟動、停止、重新開機一個或多個程序。用supervisor管理的程序,當一個程序意外被殺死,supervisor監聽到程序死後,會自動将它重新開機,很友善的做到程序自動恢複的功能,不再需要自己寫shell腳本來控制。

supervisor隻能監控前台程式, 如果你的程式是通過fork方式實作的daemon服務,則不能用它監控。

其實就相當于守護程序了,確定某些服務保持啟動的狀态,supervisor完全可以做到,而且不用寫腳本,不用去循環判斷了。

安裝supervisor(yum安裝,基于centos)

yum install epel-release

yum install supervisor

檔案配置

安裝完成後,/etc/ supervisord.conf檔案,看一下他的include檔案位址,就像nginx的include一樣,配置檔案,我們單獨建立配置:

supervisor的安裝與使用

我們可以看到,include指向了supervisord.d檔案夾,一檢視,還真有這個檔案夾,我們直接在這個檔案夾下建立xxx.ini檔案好了,其實也可以自己指定include的路徑,也可以指定檔案類型xxx.conf,根據自己需要吧,這裡我還是按照它指定的好了。

supervisor的安裝與使用

建立一個owh.ini檔案:

supervisor的安裝與使用

内容如下:

[program:still_write] ; 程式名稱,在 supervisorctl 中通過這個值來對程式進行一系列的操作
autorestart=True      ; 程式異常退出後自動重新開機
autostart=True        ; 在 supervisord 啟動的時候也自動啟動
redirect_stderr=True  ; 把 stderr 重定向到 stdout,預設 false
; environment=PATH="/home/app_env/bin"  ; 可以通過 environment 來添加需要的環境變量,一種常見的用法是使用指定的 virtualenv 環境
command=python /root/test.py  ; 啟動指令,與手動在指令行啟動的指令是一樣的
user=root           ; 用哪個使用者啟動
directory=/root/  ; 程式的啟動目錄
stdout_logfile_maxbytes = 20MB  ; stdout 日志檔案大小,預設 50MB
stdout_logfile_backups = 20     ; stdout 日志檔案備份數
startretries=10               ; 啟動失敗時的最多重試次數
; stdout 日志檔案,需要注意當指定目錄不存在時無法正常啟動,是以需要手動建立目錄(supervisord 會自動建立日志檔案)
stdout_logfile = /data/logs/usercenter_stdout.log
           

建立一個/root/test.py #也就是保證test.py程序一直啟動,該程序會一直寫檔案,你可以時刻檢視該檔案的内容:cat /root/a.txt

import time
while True:
    a=open('a.txt','a')
    a.write('1')
    a.close()
time.sleep(2)
建立一個輸出log檔案夾:
mkdir –p /data/logs
           

關于配置檔案的全部資訊解釋,請參照下面這個位址,解釋的很全面:

https://www.cnblogs.com/xuezhigu/p/7660203.html

管理多個程序

如果想要監控多幾個程序,則直接加多一個[program:Pid_name]即可,這裡特别說明一下nginx的監控,因為nginx預設啟動是背景的,是以這裡需要特别設定一下nginx以前台的方式啟動,這樣supervisor才能夠實時監控:

command=/home/packages/nginx/sbin/nginx -g ‘daemon off;’

配置資訊如下:

supervisor的安裝與使用

啟動、測試

supervisord -c /etc/supervisord.conf #啟動supervisor服務

我們可以看到,在/root目錄生成了一個a.txt檔案,而且會一直增加資料,我們可以ps ax|grep python 檢視一下程序:

supervisor的安裝與使用

我們發現,已經存在這個程序,如果此時kill掉這個程序,還是會再次啟動,經過驗證,沒有問題。

nginx也在的。

supervisor的安裝與使用

web界面操作

在/etc/supervisord.conf 配置檔案中,找到inet_http_server,改成你的IP,下面的賬号和密碼随意設定

supervisor的安裝與使用

之後重新加載配置檔案使其生效:

supervisorctl update

網頁登入:192.168.1.5:9001 #登入之前記得關閉防火牆,或者開放9001端口

輸入賬号密碼:

supervisor的安裝與使用

登入後的頁面如下:

supervisor的安裝與使用

在這裡可以通過頁面上重新開機或者停止程序,也可以清除相應程序的log資訊

supervisorctl管理指令

檢視任務狀态

supervisorctl status #檢視所有服務狀态

supervisor的安裝與使用

第一清單示程序名稱,也就是上面配置檔案定義的頭部分:

supervisor的安裝與使用
supervisor的安裝與使用

第二清單示運作狀态,第三清單示程序号,第四清單示運作時間

supervisorctl status still_write #檢視單個程序狀态

supervisor的安裝與使用

啟動、停止、重新開機任務

啟動、停止單個任務

supervisorctl stop|start nginx

supervisor的安裝與使用

啟動、停止所有任務

supervisorctl stop|start all

supervisor的安裝與使用

重新開機單個、或者所有任務

supervisorctl restart all|nginx

supervisor的安裝與使用

重新加載配置檔案

如果配置檔案修改,比如上面的owh.ini檔案,比如改變了服務,或者新增了服務,需要重新加載檔案資訊:

supervisorctl update :配置檔案修改後可以使用該指令加載新的配置

supervisorctl reload: 重新啟動配置中的所有程式

此時無需重新開機服務,配置檔案的服務将會生效,我發現,這兩個指令都可以做到。

繼續閱讀