進程管理工具-Supervisord 使用


簡介

Supervisor 是一個用 Python 寫的進程管理工具,可以很方便的用來在 UNIX-like 系統(不支持 Windows)下啟動、重啟(自動重啟程序)、關閉進程(不僅僅是 Python 進程)

Supervisor 是一個 C/S 模型的程序,supervisord 是 server 端,supervisorctl 是 client 端

1. 基本命令

安裝:
1、sudo pip install supervisor

2、默認配置文件位置:
[root@localhost /]# cat etc/supervisord.conf

3、自定義配置目錄:
[root@localhost supervisord.d]# pwd
/etc/supervisord.d
[root@localhost supervisord.d]# ls
gunicorn.ini  yun.ini

4、啟動服務:
[root@localhost /]# supervisord -c /etc/supervisord.conf
/usr/lib/python2.7/site-packages/supervisor/options.py:383: PkgResourcesDeprecationWarning: Parameters to load are deprecated.  Call .resolve and .require separately.
  return pkg_resources.EntryPoint.parse("x="+spec).load(False)
[root@localhost /]# ps -aux|grep supervisord
root      5135  0.1  0.8 226152 16736 ?        Ss   22:13   0:00 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf
root      5137  0.0  0.0 112724   992 pts/0    R+   22:13   0:00 grep --color=auto supervisord

注:kill 進程號  

5、supervisorctl 操作:
輸入命令 supervisorctl 進入 supervisorctl 的 shell 交互界面:

help # 查看幫助
status # 查看程序狀態
stop program_name # 關閉 指定的程序
start program_name # 啟動 指定的程序
restart program_name # 重啟 指定的程序
tail -f program_name # 查看 該程序的日志
update # 重啟配置文件修改過的程序(修改了配置,通過這個命令加載新的配置)

2. 配置文件

2.1 默認配置文件解析:

位置:etc/supervisord.conf

內容:

# 指定了socket file的位置
[unix_http_server]
file=/tmp/supervisor.sock   ;UNIX socket 文件,supervisorctl 會使用
;chmod=0700                 ;socket文件的mode,默認是0700
;chown=nobody:nogroup       ;socket文件的owner,格式:uid:gid
 
 #用於啟動一個含有前端的服務,可以從Web頁面中管理服務。其中,port用於設置訪問地址,username和password用於設置授權認證。
;[inet_http_server]         ;HTTP服務器,提供web管理界面
;port=127.0.0.1:9001        ;Web管理后台運行的IP和端口,如果開放到公網,需要注意安全性
;username=user              ;登錄管理后台的用戶名
;password=123               ;登錄管理后台的密碼
 
 # 管理服務本身的配置
[supervisord]
logfile=/tmp/supervisord.log ;日志文件,默認是 $CWD/supervisord.log
logfile_maxbytes=50MB        ;日志文件大小,超出會rotate,默認 50MB,如果設成0,表示不限制大小
logfile_backups=10           ;日志文件保留備份數量默認10,設為0表示不備份
loglevel=info                ;日志級別,默認info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ;pid 文件
nodaemon=false               ;是否在前台啟動,默認是false,即以 daemon 的方式啟動
minfds=1024                  ;可以打開的文件描述符的最小值,默認 1024
minprocs=200                 ;可以打開的進程數的最小值,默認 200
 
 
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ;通過UNIX socket連接supervisord,路徑與unix_http_server部分的file一致
;serverurl=http://127.0.0.1:9001 ; 通過HTTP的方式連接supervisord
 
; [program:xx]是被管理的進程配置參數,xx是進程的名稱
[program:xx]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run  ; 程序啟動命令
autostart=true       ; 在supervisord啟動的時候也自動啟動
startsecs=10         ; 啟動10秒后沒有異常退出,就表示進程正常啟動了,默認為1秒
autorestart=true     ; 程序退出后自動重啟,可選值:[unexpected,true,false],默認為unexpected,表示進程意外殺死后才重啟
startretries=3       ; 啟動失敗自動重試次數,默認是3
user=tomcat          ; 用哪個用戶啟動進程,默認是root
priority=999         ; 進程啟動優先級,默認999,值小的優先啟動
redirect_stderr=true ; 把stderr重定向到stdout,默認false
stdout_logfile_maxbytes=20MB  ; stdout 日志文件大小,默認50MB
stdout_logfile_backups = 20   ; stdout 日志文件備份數,默認是10
; stdout 日志文件,需要注意當指定目錄不存在時無法正常啟動,所以需要手動創建目錄(supervisord 會自動創建日志文件)
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
stopasgroup=false     ;默認為false,進程被殺死時,是否向這個進程組發送stop信號,包括子進程
killasgroup=false     ;默認為false,向進程組發送kill信號,包括子進程
 # 對事件進行的管理
;[eventlistener:theeventlistenername]

# 對任務組的管理 ,包含其它配置文件
;[group:thegroupname]
;programs=progname1,progname2  ; each refers to 'x' in [program:x] definitions
;priority=999                  ; the relative start priority (default 999)

[include]
files = supervisord.d/*.ini    ;可以指定一個或多個以.ini結束的配置文件

2.2 自定義進程配置

注:supervisord.d目錄用來存放用戶自定義的進程配置

例子:文件 qqc.ini
# 程序名稱,在 supervisorctl 中通過這個值來對程序進行一系列的操作
[program:qqc_one]
# 啟動命令,與手動在命令行啟動的命令是一樣的
command=gunicorn wsgi:application -b 0.0.0.0:8000 -k gevent -w 2 -t 10 -n yun-gunicorn -m 0022 --log-level=info --access-logfile=- --error-logfile=- --max-requests=5000
# 程序的啟動目錄
directory=/home/yun/projects/yun
# 可以通過 environment 來添加需要的環境變量,一種常見的用法是使用指定的 virtualenv 環境
environment=DJANGO_SETTINGS_MODULE=settings.test
# 指定用戶名
user=opt
# 日志目錄 需要注意當指定目錄不存在時無法正常啟動,所以需要手動創建目錄(supervisord 會自動創建日志文件)
stdout_logfile=/var/log/supervisor/yun-gunicorn.stdout.log
stderr_logfile=/var/log/supervisor/yun-gunicorn.stderr.log
# 日志備份數量
stdout_logfile_backups = 20
# 指定日志文件大小
stdout_logfile_maxbytes = 20MB 
# 把 stderr 重定向到 stdout,默認 false,錯誤日志也會寫進stdout_logfile中
redirect_stderr=True
# 在 supervisord 啟動的時候也自動啟動
autostart=True    
# 程序異常退出后自動重啟
autorestart=True

[program:qqc_two]
...
[program:qqc_free]
...

# 集中管理多個進程
[group:qqc]
programs=qqc_one,qqc_two,qqc_free
  • 注意: supervisor不能監控后台進程,command 不能為后台運行命令


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM