supervisor进程管理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了supervisor进程管理相关的知识,希望对你有一定的参考价值。
参考技术Asupervisor是一个python写的进程管理工具,可以很方便来启动、重启、关闭进程。
优点:除了对单个进程的控制,还可以同时启动、关闭多个进程,当服务器出现问题导致所有的应用程序都被杀死后,此时可以用supervisor同时启动所有应用程序而不是一个一个敲命令去启动
1、首先是安装 supervisor,通过pip进行安装,之后运行 echo_supervisord_conf 命令输出默认的配置项
2、配置中, supervisord 是server端,对应的 supervisorctl 是client端,还有相应的 应用程序
下面是supervisord的配置
inet_http_server 指的是怎么在浏览器界面去访问
supervisorctl指的是client端,配置如下
注意:supervisorctl指的是在终端上敲命令怎么去实现,inet_http_server指的是在浏览器上怎么去访问,两者是不同的客户端访问方式,但是访问的都是一套后端服务 supervisord
所以需要保证两者的鉴权方式和访问的端口等等均是一致的
应用程序配置
其中[ program:hisearch ]里面的hisearch是应用程序的唯一标识,不能重复,对该程序的所有操作(start, restart 等)都通过名字来实现
有时候用 Supervisor 托管的程序还会有子进程(如 监控任务),如果只杀死主进程,子进程就可能变成孤儿进程。通过这两项配置来确保所有子进程都能正确停止:
将上面的配置保存到/etc/supervisor/supervisord.conf 这个配置文件里面,运行如下命令开启服务端服务 supervisord
查看 supervisord 是否在运行
Supervisorctl 是 supervisord 的一个命令行客户端工具,启动时需要指定与 supervisord 使用同一份配置文件
上面这个命令会进入 supervisorctl 的 shell 界面,然后可以执行不同的命令了:
1、supervisor ERROR (spawn error)现象
原因: supervisord.conf配置文件不正确导致的
2、supervisorctl refused connection 现象
原因:[ supervisorctl ]处的端口,鉴权方式和 [inet_http_server] 处的不一致,需要保持一致
3、【FATAL 或BACKOFF】 Exited too quickly (process log may have details)
原因:将supervisord.conf文件里面每个program里面的startsecs由原来的5改为10
参考文件: http://liyangliang.me/posts/2015/06/using-supervisor/
supervisor进程管理程序
一.supervisor简介Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。
注意:
supervisor在docker里管理多个进程十分方便
二.安装
1.通过python pip安装
yum install python-setuptools
easy_install pip
pip install supervisor
2.创建配置文件夹
mkdir /etc/supervisor 主配置文件夹
mkdir /etc/supervisor/conf.d 子进程文件夹
mkdir /etc/supervisor/pid 主进程pid
mkdir /etc/supervisor/run 主进程socket
3.创建supervisor 主配置文件
vim /etc/supervisor/supervisord.conf
[supervisord]
logfile = /etc/supervisor/log/supervisord.log
logfile_maxbytes = 50MB
logfile_backups=10
loglevel = info
pidfile = /etc/supervisor/run/supervisord.pid
nodaemon = false
minfds = 1024
minprocs = 200
umask = 022
user = root
identifier = supervisor
directory = /etc/supervisor/
nocleanup = true
childlogdir = /etc/supervisor/log
strip_ansi = false
[supervisorctl]
serverurl = unix:///etc/supervisor/run/supervisord.sock
#serverurl = http://127.0.0.1:9001
prompt = supervisor
chmod = 0777
[unix_http_server]
file=/etc/supervisor/run/supervisord.sock
[inet_http_server]
port=*:9001
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[include]
files=/etc/supervisor/conf.d/*.conf
4.启动服务
supervisord -c /etc/supervisor/supervisord.conf
三.创建nginx服务,使用supervisor监控服务进程
1.源码编译安装nginx
测试手动可以正常启动nginx
2.在/etc/supervisor/conf.d 创建nginx服务进程配置文件
vim /etc/supervisor/conf.d/nginx.conf
[program:nginx]
command=/usr/local/nginx/sbin/nginx -g ‘daemon off;‘
process_name=nginx
directory=/usr/local/nginx
autostart=true
autorestart=true
startsecs=10
startretries=2
exitcodes=0,2
stopsignal=TERM
stopwaitsecs=10
user=root
redirect_stderr=true
stdout_logfile=NONE
redirect_stdout=true
stderr_logfile=NONE
3.启动服务,正常
[root@server2 conf.d]# supervisorctl update
[root@server2 conf.d]# supervisorctl status
四.创建tomcat服务,使用supervisor监控服务进程
1.安装java
2.安装tomcat
.
3.在/etc/supervisor/conf.d 创建tomcat服务进程配置文件
vim /etc/supervisor/conf.d/tomcat.conf
[program:tomcat]
command=/usr/local/apache-tomcat-8.5.53/bin/catalina.sh run
process_name=tomcat
numprocs=1
directory=/usr/local/apache-tomcat-8.5.53
autostart=true
autorestart=true
startsecs=10
startretries=2
exitcodes=0,2
stopsignal=TERM
stopwaitsecs=10
user=root
redirect_stderr=true
stdout_logfile=NONE
redirect_stdout=true
stderr_logfile=NONE
environment=JAVA_HOME="/usr/jdk/",JAVA_BIN="/usr/jdk/bin"
4.启动服务,正常
[root@server2 conf.d]# supervisorctl update
[root@server2 conf.d]# supervisorctl status
web界面
五.命令简介
supervisorctl status //查看所有进程的状态
supervisorctl stop nginx //停止nginx
supervisorctl start nginx //启动nginx
supervisorctl restart nginx //重启nginx
supervisorctl update //配置文件修改后使用该命令加载新的配置
supervisorctl reload //重新启动配置中的所有程序
六.program配置讲解
- command:启动程序使用的命令,可以是绝对路径或者相对路径
- process_name:一个python字符串表达式,用来表示supervisor进程启动的这个的名称,默认值是%(program_name)s
- numprocs:Supervisor启动这个程序的多个实例,如果numprocs>1,则process_name的表达式必须包含%(process_num)s,默认是1
- numprocs_start:一个int偏移值,当启动实例的时候用来计算numprocs的值
- priority:权重,可以控制程序启动和关闭时的顺序,权重越低:越早启动,越晚关闭。默认值是999
- autostart:如果设置为true,当supervisord启动的时候,进程会自动重启。
- autorestart:值可以是false、true、unexpected。false:进程不会自动重启,unexpected:当程序退出时的退出码不是exitcodes中定义的时,进程会重启,true:进程会无条件重启当退出的时候。
- startsecs:程序启动后等待多长时间后才认为程序启动成功
- startretries:supervisord尝试启动一个程序时尝试的次数。默认是3
- exitcodes:一个预期的退出返回码,默认是0,2。
- stopsignal:当收到stop请求的时候,发送信号给程序,默认是TERM信号,也可以是 HUP, INT, QUIT, KILL, USR1, or USR2。
- stopwaitsecs:在操作系统给supervisord发送SIGCHILD信号时等待的时间
- stopasgroup:如果设置为true,则会使supervisor发送停止信号到整个进程组
- killasgroup:如果设置为true,则在给程序发送SIGKILL信号的时候,会发送到整个进程组,它的子进程也会受到影响。
- user:如果supervisord以root运行,则会使用这个设置用户启动子程序
- redirect_stderr:如果设置为true,进程则会把标准错误输出到supervisord后台的标准输出文件描述符。
- stdout_logfile:把进程的标准输出写入文件中,如果stdout_logfile没有设置或者设置为AUTO,则supervisor会自动选择一个文件位置。
- stdout_logfile_maxbytes:标准输出log文件达到多少后自动进行轮转,单位是KB、MB、GB。如果设置为0则表示不限制日志文件大小
- stdout_logfile_backups:标准输出日志轮转备份的数量,默认是10,如果设置为0,则不备份
- stdout_capture_maxbytes:当进程处于stderr capture mode模式的时候,写入FIFO队列的最大bytes值,单位可以是KB、MB、GB
- stdout_events_enabled:如果设置为true,当进程在写它的stderr到文件描述符的时候,PROCESS_LOG_STDERR事件会被触发
- stderr_logfile:把进程的错误日志输出一个文件中,除非redirect_stderr参数被设置为true
- stderr_logfile_maxbytes:错误log文件达到多少后自动进行轮转,单位是KB、MB、GB。如果设置为0则表示不限制日志文件大小
- stderr_logfile_backups:错误日志轮转备份的数量,默认是10,如果设置为0,则不备份
- stderr_capture_maxbytes:当进程处于stderr capture mode模式的时候,写入FIFO队列的最大bytes值,单位可以是KB、MB、GB
- stderr_events_enabled:如果设置为true,当进程在写它的stderr到文件描述符的时候,PROCESS_LOG_STDERR事件会被触发
- environment:一个k/v对的list列表
- directory:supervisord在生成子进程的时候会切换到该目录
- umask:设置进程的umask
- serverurl:是否允许子进程和内部的HTTP服务通讯,如果设置为AUTO,supervisor会自动的构造一个url
以上是关于supervisor进程管理的主要内容,如果未能解决你的问题,请参考以下文章