Linux-進程管理supervisor

簡介

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操作

supervisorctlsupervisord 的命令行客戶端工具,直接輸入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.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章