Live2D

[服务器]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的命令行客户端工具

  1. supervisorctl status:查看所有进程的状态

  2. supervisorctl stop es:停止es

  3. supervisorctl start es:启动es

  4. supervisorctl restart es: 重启es

  5. supervisorctl update :配置文件修改后可以使用该命令加载新的配置

  6. supervisorctl reload: 重新启动配置中的所有程序

    把es 换成all 可以管理配置中的所有进程

  7. supervisorctl stop|start program_name *#停止|启动任务*

  8. supervisorctl restart program_name *#重启某个进程*

  9. supervisorctl stop foo: *#停止所有属于名为foo这个分组的进程(start,restart同理),注意冒号*

  10. supervisorctl stop all*#停止全部进程,注:start、restart、stop都不会载入最新的配置文件。

  11. supervisorctl reload*#载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。

  12. supervisorctl update*#根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。

  13. supervisorctl tail -f program_name *# 查看 该程序的日志

  14. supervisorctl shutdown *#关闭supervisord进程

  15. supervisorctl status *#查看所有任务状态

  16. 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

[示例:

Unlinking stale socket /tmp/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失败:ERROR] Connection in use 127.0.0.1 8080

原因:是之前的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

posted @ 2020-08-26 08:56  含光掠影  阅读(852)  评论(0)    收藏  举报