簡介
Supervisor
是可以在類 UNIX
系統中進行管理和監控各種進程的小型系統。它自帶了客戶端和服務端工具。可以通過用戶所定義的配置文件來管理和監控單個或多個進程,並且它可以根據配置來對異常崩潰的進程進行重啓操作。
環境信息
[root@suhw ~]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
安裝
[root@suhw ~]# yum install epel-release
[root@suhw ~]# yum install supervisor
[root@suhw ~]# systemctl enable supervisord # 開機自啓動
[root@suhw ~]# systemctl start supervisord # 啓動supervisord服務
[root@suhw ~]# systemctl status supervisord # 查看supervisord服務狀態
配置
配置選項可具體參考/etc/supervisord.conf
中的詳細介紹,或者可參考http://supervisord.org/
若想新增要管理的進程,直接在supervisor
的配置文件默認目錄/etc/supervisord.d/
下添加ini
文件即可,在/etc/supervisord.conf
中已定義會將/etc/supervisord.d/
目錄下所有的ini
文件都會包含進來。
...
[include]
files = supervisord.d/*.ini
管理redis
每個 program
代表了一個要進行管理的進程,我們可以在這裏進行進程的相關配置。
編輯配置文件
假設此時需要使用supervisor
管理redis-server
,編輯/etc/supervisord.d/redis.ini
# 項目名
[program:redis]
# 腳本執行命令
command=/usr/bin/redis-server /etc/redis.conf
# 當進程數爲 1 時 爲 %(program_name)s
# 當進程數 >1 時 應配置爲 %(program_name)s_%(process_num)02d
process_name=%(program_name)s
# 如果numprocs>1,supervisor啓動當前program時會實例化好幾個子進程,默認情況取1
numprocs=1
# supervisord作爲守護進程的時候,會轉換路徑到該目錄
directory=/suhw/data/redis
# supervisord進程的文件權限掩碼,默認 022
umask=022
# 進程啓動優先級,默認999,值小的優先啓動
priority=999
# supervisor啓動時是否跟隨同時啓動(默認爲true)
autostart=true
# 啓動1秒後沒有異常退出,就表示進程正常啓動了,默認爲1秒
startsecs=2
# 程序退出後自動重啓,可選值:[unexpected,true,false],默認爲unexpected,表示進程意外殺死後才重啓
autorestart=true
# 啓動失敗自動重試次數,默認是3
startretries=100
# 腳本運行的用戶身份
# user=csmp
# 把stderr重定向到stdout,默認 false
redirect_stderr=true
# 日誌輸出
stdout_logfile=/suhw/data/redis/logs/%(program_name)s-stdout.log
# stdout日誌文件大小,默認 50MB
stdout_logfile_maxbytes=10MB
# stdout 日誌文件備份數
stdout_logfile_backups=10
# 當進程處於stdout capture mode模式的時候,寫入capture FIFO的最大字節數限制,默認爲0,此時認爲stdout capture mode模式關閉;
stdout_capture_maxbytes=10MB
重新載入配置
# 重新加載配置並根據需要添加/刪除,並將重新啓動受影響的程序
[root@suhw ~]# supervisorctl update
# 重新載入 supervisord
[root@suhw ~]# supervisorctl reload
查看狀態
[root@suhw ~]# supervisorctl status
redis RUNNING pid 19573, uptime 0:00:18
此時redis
服務已經被supervisor
所接管了,我們以後就可通過supervisorctl
進行服務的操作
supervisorctl
操作
supervisorctl
是 supervisord
的命令行客戶端工具,直接輸入supervisorctl
可進入交互界面,也可直接輸入shell
命令操作。
[root@suhw ~]# supervisorctl
redis RUNNING pid 19573, uptime 0:20:06
supervisor> help
default commands (type help <topic>):
=====================================
add exit open reload restart start tail
avail fg pid remove shutdown status update
clear maintail quit reread signal stop version
supervisorctl
可選參數如上,可以在交互模式中輸入 help xxx
查看對應命令的作用,舉例如下
supervisor> help reload
reload Restart the remote supervisord.