天天看點

安裝配置Supervisor

應用場景

應用程式需要24小時不間斷運作,這時可使用 supervisor 監控應用程式的程序,當發生應用程式内部錯誤退出、程序被殺死等情況時,自動重新開機應用程式。

官方網站 http://supervisord.org

支援的系統

Supervisor 是一個 UNIX 下的程序管理軟體

Supervisor 不可以在任何版本的 Windows 上運作

Supervisor 可以運作在 Python 2.4 或者更高的 Python版本,但是不可以在任何 Python 3 的版本上運作。

1:安裝

安裝完成後出現:

[[email protected] ~]# ll /usr/bin/super*
-rwxr-xr-x  root root  月   : /usr/bin/supervisorctl
-rwxr-xr-x  root root  月   : /usr/bin/supervisord
           

說明

supervisor服務守護程序:/usr/bin/supervisord

supervisor服務控制程式:/usr/bin/supervisorctl

使用supervisord的指令行用戶端管理工具supervisorctl,來管理程序

2:配置

運作 echo_supervisord_conf指令,可輸出詳細的配置檔案内容,配置檔案中分号“;”的功能為注釋

将預設的配置檔案重定向至/etc路徑下(友善管理)

檔案最後有個配置項:【一定要打開include本行,就是要去掉前面的分号】

[include]
;files = relative/directory/*.ini
files = /etc/supervisor/*.conf
           

可以把需要監控的腳本單獨寫在一個檔案中,在這裡配置路徑進行監控

[[email protected] supervisor]# ll /etc/supervisor/*.conf
-rw-r--r-- 1 root root 566 8月   2 18:27 /etc/supervisor/flaskzhuzhong.conf
           

flaskzhuzhong.conf 這個檔案(用 Python 和 Flask 架構編寫的一個服務)就是單獨配置的需要監控的程式,以下是具體配置内容:

[[email protected] supervisor]# cat /etc/supervisor/flaskzhuzhong.conf
[program:自定義的程式名字]
directory=腳本的絕對路徑
command=python demo.py
redirect_stderr=true
stdout_logfile=日志的輸出絕對路徑+檔案名字
autostart=true                  ; 程式是否随supervisor啟動而啟動  
autorestart=true                ; 程式停止時,是否自動重新開機  
stopasgroup=true                ; send stop signal to the UNIX process group (default false)
killasgroup=true                ; SIGKILL the UNIX process group (def false)
           

Notice: 如何停止子程序

場景:如果supervisord.conf中配置的command是執行一個bash,而bash裡執行Java,那麼當使用supervisorctl stop [programname]停止程式時,隻有上層程序被停止,而java程序沒有被停止。

解決辦法:

在配置檔案中設定:

stopasgroup=true

killasgroup=true

3:啟動 supervisor

4:檢視監控的程式

方式1:使用supervisorctl管理程式

開啟/停止某個程式

supervisorctl [start | stop] [program名稱] //在supervisord.conf中定義的

檢視程序狀态

$supervisorctl status

$ supervisorctl status
$ supervisorctl stop usercenter
$ supervisorctl start usercenter
$ supervisorctl restart usercenter
$ supervisorctl reread
$ supervisorctl update
           
方式2:啟動 web 管理界面

修改如下:

[[email protected] supervisor]# vim /etc/supervisord.conf

[inet_http_server]         ; inet (TCP) server disabled by default
port=IP:        ; ip_address:port specifier, *:port for all iface
username=xxxxx              ; default is no username (open server)
password=xxxxx               ; default is no password (open server)
           

浏覽器打開 http://IP:9001 進行通路,需要輸入上面配置的使用者名密碼。

5:配置開機啟動 supervisor 【可以配置也可以不配置,最好配置~】

第1步:建立檔案 supervisord.service 并進行配置

第2步:将檔案 supervisord.service 拷貝至 /usr/lib/systemd/system/supervisord.service

第1步:建立檔案 supervisord.service 并進行配置

[[email protected] supervisor]# > supervisord.service

# 寫入如下配置,然後儲存,檢視檔案
[[email protected] supervisor]# cat supervisord.service
[Unit]
Description=Supervisor daemon

[Service]
Type=forking
# 需要檢視并配置伺服器實際安裝過程中配置檔案 supervisord.conf 所在的路徑
ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

# 将檔案拷貝至:“/usr/lib/systemd/system/supervisord.service”
# https://www.cnblogs.com/94cool/p/5952219.html
# 2018年 06月 05日 星期二 14:39:18 CST
           

第2步:将檔案 supervisord.service 拷貝至 /usr/lib/systemd/system/supervisord.service

# 拷貝
[root@oncloud2 supervisor]# cp supervisord.service /usr/lib/systemd/system/supervisord.service
# 設定為開啟啟動
[root@oncloud2 supervisor]# systemctl enable supervisord
Created symlink from /etc/systemd/system/multi-user.target.wants/supervisord.service to /usr/lib/systemd/system/supervisord.service.
# 驗證一下是否為開機啟動
[root@oncloud2 supervisor]# systemctl is-enabled supervisord
enabled
           

參考連結:

http://www.cnblogs.com/shijingjing07/p/6024066.html

http://www.ttlsa.com/linux/using-supervisor-control-program/

http://blog.csdn.net/slx_2011/article/details/44751951

http://www.cnblogs.com/ajianbeyourself/p/5534737.html

http://www.jianshu.com/p/326da8d1ba84

配置Supervisor開機啟動