[服务器]supervisor 服务器监控使用小结
配置Supervisor
服务端启动命令:
supervisord -c /etc/supervisord.conf
-
command:启动程序使用的命令,可以是绝对路径或者相对路径; 这个就是我们的要启动进程的命令路径了,可以带参数,例子:/home/test.py -a 'hehe',有一点需要注意的是,我们的command只能是那种在终端运行的进程,不能是守护进程。这个想想也知道了,比如说command=service httpd start。httpd这个进程被linux的service管理了,我们的supervisor再去启动这个命令这已经不是严格意义的子进程了。这个是个必须设置的项
-
process_name:一个python字符串表达式,用来表示supervisor进程启动的这个的名称,默认值是%(program_name)s
-
numprocs:Supervisor启动这个程序的多个实例,如果numprocs>1,则process_name的表达式必须包含%(process_num)s,默认是1 ; 启动几个进程,启动进程的数目。当不为1时,就是进程池的概念,注意process_name的设置
-
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
supervisorctl 是 supervisord的命令行客户端工具
-
supervisorctl status:查看所有进程的状态 -
supervisorctl stop es:停止es -
supervisorctl start es:启动es -
supervisorctl restart es: 重启es -
supervisorctl update :配置文件修改后可以使用该命令加载新的配置 -
supervisorctl reload: 重新启动配置中的所有程序把es 换成all 可以管理配置中的所有进程
-
supervisorctl stop|start program_name *#停止|启动任务* -
supervisorctl restart program_name *#重启某个进程* -
supervisorctl stop foo: *#停止所有属于名为foo这个分组的进程(start,restart同理),注意冒号* -
supervisorctl stop all*#停止全部进程,注:start、restart、stop都不会载入最新的配置文件。 -
supervisorctl reload*#载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。 -
supervisorctl update*#根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。 -
supervisorctl tail -f program_name *# 查看 该程序的日志 -
supervisorctl shutdown *#关闭supervisord进程 -
supervisorctl status *#查看所有任务状态 -
ps -ef | grep common *#查看进程信息*
注意: supervisor不能监控后台进程,command 不能为后台运行命令。
在supervisord.conf配置:
例如:
[inet_http_server] ; inet (TCP) server disabled by default port=0.0.0.0:8181 ;ip_address:port specifier, *:port for all iface username=test ; default is no username (open server) password=testpp ; default is no password (open server)
终端查看程序运行状态命令是 : lsof -i:8181
浏览器可以打开 ip:8181 输入账号密码 查看程序运行状态
踩过的坑
1、unix:///var/run/supervisor/supervisor.sock no such file
问题描述:安装好supervisor没有开启服务直接使用supervisorctl报的错
解决办法:supervisord -c /etc/supervisord.conf
2、command中指定的进程已经起来,但supervisor还不断重启
问题描述:command中启动方式为后台启动,导致识别不到pid,然后不断重启,本人使用的是elasticsearch,command 指定的是$path/bin/elasticsearch -d,踩到的坑
解决办法:supervisor无法检测后台启动进程的pid,而supervisor本身就是后台启动守护进程,因此不用担心这个
3、启动了多个supervisord服务,导致无法正常关闭服务
问题描述:在运行supervisord -c /etc/supervisord.conf 之前,我直接运行过supervisord -c /etc/supervisord.d/xx.conf ,导致有些进程被多个superviord管理,无法正常关闭进程。
解决办法: 使用 ps -fe | grep supervisord 查看所有启动过的supervisord服务,kill相关的进程。
4.Starting supervisor: Unlinking stale socket /var/run/supervisor.sock
解决办法:
find / -name supervisor.sock
unlink /***/supervisor.sock
[示例:
解决办法:命令 unlink /tmp/supervisor.sock
5.supervisord 报错:INFO gave up: gunicorn entered FATAL state, too many start retries too quickly
解决办法: 修改gunicorn.py的daemonize为False
6.[运行gunicorn失败:
原因:是之前的gunicorn没停掉
解决:netstat -tulpn
-》找到对应的进程,记住对应的PID,即之前的一个gunicorn进程未清理
-》然后去用: kill -9 占用了8080端口的进程的PID
即可杀掉对应进程。
重新在supervisorctl下reload即可。
如果supervisorCPU和内存占用率特别高,导致机器卡死。
尝试注释掉2.4中的web。 ---->>> https://github.com/Supervisor/supervisor/issues/581
【相关文章】:
详解Supervisor进程守护监控 - 请叫我头头哥 - 博客园 https://www.cnblogs.com/toutou/p/supervisor.html
ubuntu18.04使用supervisor_风轻云断的博客-CSDN博客_ubuntu supervisor https://blog.csdn.net/A156348933/article/details/85158005
进程管理supervisor的简单说明 - jyzhou - 博客园 https://www.cnblogs.com/zhoujinyi/p/6073705.html

浙公网安备 33010602011771号