Supervisor是使用python开发的一个进程管工具,可以监控进程状态,异常退出时能自动重启
一、安装python环境
由于centos自带python环境,因此可以跳过安装
二、安装Supervisor
yum install -y supervisor
如果安装失败,需要安装下yum源
yum install -y epel-release
三、生成Supervisor配置文件
python /usr/bin/supervisord -c /etc/supervisord.conf
四、配置文件supervisord.conf
文件路径:/etc/supervisord.conf
; Sample supervisor config file.
[unix_http_server]
file=/var/run/supervisor/supervisor.sock ; UNIX socket 文件,supervisorctl 使用
;chmod=0700 ; socket文件的mode,默认是0700
;chown=nobody:nogroup ; socket文件的owner,格式:uid:gid
;username=user ; supervisorctl 操作时鉴权用户名(如果开启了)
;password=123 ; supervisorctl 操作时鉴权用户名(如果开启了)
;[inet_http_server] ; HTTP服务器,提供web管理界面
;port=127.0.0.1:9001 ; Web管理后台运行的IP和端口,如果开放到公网,需要注意安全性
;username=user ; 登录管理后台的用户名(如果开启了)
;password=123 ; 登录管理后台的用户名(如果开启了)
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; 日志文件,默认是 $CWD/supervisord.log
logfile_maxbytes=50MB ; 日志文件大小,超出会rotate,默认 50MB,如果设成0,表示不限制大小
logfile_backups=10 ; 日志文件保留备份数量默认10,设为0表示不备份
loglevel=info ; 日志级别,默认info,其它: debug,warn,trace
pidfile=/var/run/supervisord.pid ; pid文件,默认supervisord.pid
nodaemon=false ; 是否在前台启动,默认是false,即以 daemon 的方式启动
minfds=1024 ; 可以打开的文件描述符的最小值,默认 1024
minprocs=200 ; 可以打开的进程数的最小值,默认 200
;umask=022 ; 进程文件创建umask,默认为022
;user=chrism ; 默认值是当前用户,如果是root用户则需要
;identifier=supervisor ; 管理员标识符,默认为'supervisor'
;directory=/tmp ; 默认情况下,启动时不使用 cd
;nocleanup=true ; 不要在开始时清理tempfile,默认为false
;childlogdir=/tmp ; 'AUTO'子日志目录,默认$TEMP
;environment=KEY=value ; 要添加的环境变量,键值对
;strip_ansi=false ; 在日志中剥离ANSI转义码,默认为false
;下面的部分必须保留在RPC的配置文件中
;(superorctl /web接口)才能工作,其他接口可能需要
;通过在单独的rpcinterface:节中定义它们来添加
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor/supervisor.sock ; 通过UNIX socket连接supervisord,路径与unix_http_server部分的file一致
;serverurl=http://127.0.0.1:9001 ; 通过 http:// 的方式连接supervisord
;username=chris ; 应该是相同的unix_http_server里的username(如果开启了)
;password=123 ; 应该是相同的unix_http_server里的password(如果开启了)
;prompt=mysupervisor ; CMD行提示符(默认为"supervisor")
;history_file=~/.sc_history ; 使用readline历史记录(如果开启了)
;下面的示例程序部分显示了所有可能的程序分段值,
;创建一个或多个“真实的”程序段,以便能够控制它们
;[program:theprogramname]
;command=/bin/cat ; 脚本执行命令,可以传递参数
;process_name=%(program_name)s ; 进程名,如果我们下面的numprocs参数为1的话,就不用管这个参数了,
;numprocs=1 ; 启动进程的数目,非必须设置
;directory=/tmp ; 进程运行前,会切换到这个目录,默认不设置,非必须设置
;umask=022 ; 进程掩码,默认none,非必须
;priority=999 ; 子进程启动关闭优先级,优先级低的,最先启动,关闭的时候最后关闭,默认值为999
;autostart=true ; 如果是true的话,子进程将在supervisord启动后被自动启动,默认true
;autorestart=true ; 子进程挂掉后自动重启的情况
;startsecs=10 ; 子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功,默认10
;startretries=3 ; 当进程启动失败后,最大尝重启的次数,默认3
;exitcodes=0,2 ; 进程的退出码
;stopsignal=QUIT ; 进程停止信号 (default TERM)
;stopwaitsecs=10 ; 子进程发送stopsignal信号后,返回信息给supervisord所等待的最大时间。超过这个时间,supervisord会向该子进程发一个强制kill的信号一个强制kill的信号 (default 10)
;user=chrism ; 如果supervisord是root启动,可以设置个非root用户
;redirect_stderr=true ; stderr的日志会被写入stdout日志文件中 (default false)
;stdout_logfile=/a/path ; 子进程的stdout的日志路径,可以指定路径或者使用none和auto default AUTO
;stdout_logfile_maxbytes=1MB ; 日志文件最大大小 (default 50MB)
;stdout_logfile_backups=10 ; 日志文件保留备份数量 (default 10)
;stdout_capture_maxbytes=1MB ; 设定capture管道的大小 (default 0)
;stdout_events_enabled=false ; 在stderr写入时触发事件 (default false)
;stderr_logfile=/a/path ; 子进程的stderr的日志路径,可以指定路径或者使用none和auto default AUTO
;stderr_logfile_maxbytes=1MB ; 日志文件最大大小 (default 50MB)
;stderr_logfile_backups=10 ; 日志文件保留备份数量 (default 10)
;stderr_capture_maxbytes=1MB ; 设定capture管道的大小 (default 0)
;stderr_events_enabled=false ; 在stderr写入时触发事件 (default false)
;environment=A=1,B=2 ; 子进程的环境变量,和其他的子进程不共 (def no adds)
;serverurl=AUTO ; 覆盖服务器url计算 (childutils)
; The below sample eventlistener section shows all possible
; eventlistener subsection values, create one or more 'real'
; eventlistener: sections to be able to handle event notifications
; sent by supervisor.
;[eventlistener:theeventlistenername]
;command=/bin/eventlistener ; the program (relative uses PATH, can take args)
;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
;numprocs=1 ; number of processes copies to start (def 1)
;events=EVENT ; event notif. types to subscribe to (req'd)
;buffer_size=10 ; event buffer queue size (default 10)
;directory=/tmp ; directory to cwd to before exec (def no cwd)
;umask=022 ; umask for process (default None)
;priority=-1 ; the relative start priority (default -1)
;autostart=true ; start at supervisord start (default: true)
;autorestart=unexpected ; restart at unexpected quit (default: unexpected)
;startsecs=10 ; number of secs prog must stay running (def. 1)
;startretries=3 ; max # of serial start failures (default 3)
;exitcodes=0,2 ; 'expected' exit codes for process (default 0,2)
;stopsignal=QUIT ; signal used to kill process (default TERM)
;stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10)
;user=chrism ; setuid to this UNIX account to run the program
;redirect_stderr=true ; redirect proc stderr to stdout (default false)
;stdout_logfile=/a/path ; stdout log path, NONE for none; default AUTO
;stdout_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB)
;stdout_logfile_backups=10 ; # of stdout logfile backups (default 10)
;stdout_events_enabled=false ; emit events on stdout writes (default false)
;stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups ; # of stderr logfile backups (default 10)
;stderr_events_enabled=false ; emit events on stderr writes (default false)
;environment=A=1,B=2 ; process environment additions
;serverurl=AUTO ; override serverurl computation (childutils)
; 给进程分组,可以对组名进行统一的操作
;[group:thegroupname]
;programs=progname1,progname2 ; each refers to 'x' in [program:x] definitions
;priority=999 ; the relative start priority (default 999)
; 拆分配置文件,可以把每个program分成每个ini文件放到该目录
[include]
files = supervisord.d/*.ini
五、开启web访问
修改配置文件里的inet_http_server
去掉前面的;
[inet_http_server] ; HTTP服务器,提供web管理界面
port=0.0.0.0:9001 ; 0.0.0.0 表示监听全部ip
username=user ; 登录管理后台的用户名(如果开启了)
password=123 ; 登录管理后台的用户名(如果开启了)
输入ip:9001,登录即可
五、常用命令
supervisorctl status // 查看所有进程的状态
supervisorctl stop app // 停止app
supervisorctl start app // 启动app
supervisorctl restart // 重启app
supervisorctl update // 配置文件修改后使用该命令加载新的配置
supervisorctl reload // 重新启动配置中的所有程序
