3分鐘學會如何上手supervisor看門狗
阿新 • • 發佈:2021-02-25
### 軟硬體環境
- centos7.6.1810 64bit
```
cat /etc/redhat-release #檢視系統版本
```
- supervisor 3.4.0
- python 2.7.5
### supervisor簡介
`supervisor`是一個用`python`語言編寫的`程序管理`工具,它可以很方便的監聽、啟動、停止、重啟一個或多個程序。當一個程序意外被殺死,`supervisor`監聽到程序死後,可以很方便的讓程序自動恢復,不再需要程式設計師或系統管理員自己編寫程式碼來控制。
### supervisord安裝
```
yum install -y epel-release
yum install -y supervisor
```
#### 啟動&開啟自啟
```
systemctl start supervisord
systemctl enable supervisord
```
#### 其他命令
```
systemctl stop supervisord
systemctl start supervisord
systemctl status supervisord
systemctl reload supervisord
systemctl restart supervisord
```
### supervisor的web端
`supervisor`提供了基於`web`的控制,管理員可以通過在頁面上點點按鈕即可完成對程序的啟動、重啟等操作,甚是方便。
進入配置檔案,開啟對web端的支援
```
vim /etc/supervisord.conf
```
如果提供給外部訪問,需要將port改為本機ip地址
```
#取消10-13行註釋,前面數字是行號
[inet_http_server] ; inet (TCP) server disabled by default
port=192.168.26.121:9001 ; (ip_address:port specifier, *:port for all iface)
username=user ; (default is no username (open server))
password=123 ; (default is no password (open server))
```
配置完成後重啟服務
```
systemctl restart supervisord
```
### supervisord應用配置
進入supervisord配置檔案
```
cat /etc/supervisord.conf
```
通過配置檔案最後一行看到
```
[include]
files = supervisord.d/*.ini
```
也就是說,我們所有的應用配置檔案都儲存在這個目錄下,以**.ini**格式命名儲存的,可以自行修改地址,但不要修改後綴
那我們來建立一個受監控的應用吧
#### 建立測試python配置
建立一個名稱叫做**python**的應用程式配置
```shell
vim /etc/supervisord.d/python.ini
```
配置檔案內容,其中command就是我們應用程式啟動需要執行的命令
```ini
[program:python] #這裡的python就是我們顯示在web前端以及終端的監控名稱
command=python /tmp/supervisordtest/test.py #我們要監控的檔案地址
autostart=true
autorestart=true
startsecs=1
startretries=3
redirect_stderr=true
stdout_logfile=/tmp/supervisordtest/access_python.log #日誌地址,可自行配置目錄
stderr_logfile=/tmp/supervisordtest/error_python.log #日誌地址,可自行配置目錄
```
#### 建立test.py
```shell
mkdir /tmp/supervisordtest
vim /tmp/supervisordtest/test.py
```
程式內容:開啟一個死迴圈,不停的列印內容
```python
while True:
print(100)
```
重啟supervisord使配置檔案生效
```
systemctl restart supervisord
```
#### 檢視應用是否正常啟動
1、命令檢視
```
systemctl status supervisord
```
2、視覺化web檢視
web端可以重啟,停止,清理日誌,檢視日誌等多個操作
![image-20200607153351958](https://gitee.com/happlyfox/img/raw/master/img/image-20200607153351958.png)
### supervisor相關的幾個命令
安裝完畢,會生成3個系統命令`supervisorctl`、`supervisord`和`echo_supervisord_conf`
1. `supervisord`,執行`supervisor`時會啟動一個程序`supervisord`,它負責啟動所管理的程序,並將所管理的程序作為自己的子程序來啟動,而且可以在所管理的程序出現崩潰時自動重啟
2. supervisorctl是命令列管理工具,可以用來執行 *s*tart stop restart 等命令,來對這些子程序進行管理, 如
```
sudo supervisorctl start demoweb
```
其中demoweb是程序的名稱, 詳細的命令及說明見下面的這張表
| 命令 | 說明 |
| :--------------------------------: | :--------------------------------------------------------: |
| supervisorctl start program_name | 啟動某個程序 |
| supervisorctl stop program_name | 停止某個程序 |
| supervisorctl restart program_name | 重啟某個程序 |
| supervisorctl status program_name | 檢視某個程序的狀態 |
| supervisorctl stop all | 停止全部程序 \| \ |
| supervisorctl reload | 載入最新的配置檔案,重啟所有程序 |
| supervisorctl update | 根據最新的配置,重啟配置更改過的程序,未更新的程序不受影響 |
3. ```
echo_supervisord_conf
```
用來生成預設的配置檔案(預設配置檔案,內容非常齊全且都有註釋,適合用時查閱,用法是這樣的
```
echo_supervisord_conf > test.conf