supervisor的用法

supervisor是什么:

守护进程的一个工具;比如PM2ForeverPython底层写的supervisor 等等...

用法:

1、安装

 我用的是yum安装,还有其他的很多安装方式就不一一介绍,有兴趣的中级查

yum install supervisor

  

 2、Supervisor配置文件

echo_supervisord_conf > /disk/supervisor/supervisord.conf

3、修改默认配置文件

3.1介绍supervisord.conf

这个是我从网上找的一个关于supervisord.conf文件的一些参数介绍

[unix_http_server]
file=/tmp/supervisor.sock   ;UNIX socket 文件,supervisorctl 会使用
;chmod=0700                 ;socket文件的mode,默认是0700
;chown=nobody:nogroup       ;socket文件的owner,格式:uid:gid
 
;[inet_http_server]         ;HTTP服务器,提供web管理界面
;port=127.0.0.1:9001        ;Web管理后台运行的IP和端口,如果开放到公网,需要注意安全性3
;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
 
;包含其它配置文件 
[include]
files = /etc/supervisor/conf.d/*.conf    ;这里也就是包含了我们的任务配置

3.2配置supervisord.conf文件

 //修改地址,因为默认的tep为缓存地址,所有的tmp都得修改

  [unix_http_server]
 file=/var/run/supervisor/supervisor.sock ; the path to the socket file

  logfile=/var/log/supervisor/supervisord.log ; main log file; default $CWD/supervisord.log

logfile=/var/log/supervisor/supervisord.log ; main log file; default $CWD/supervisord.log
//出于安全考虑,默认配置是没有开启web管理界面,需要修改supervisord.conf配置文件打开http访权限

  [inet_http_server] ; inet (TCP) server disabled by default
  port=*:9001 ; ip_address:port specifier, *:port for all iface
  username=user ; default is no username (open server)
  password=123 ; default is no password (open server)



默认添加一个supervisor配置文件获取地址
[include]
files= /disk1/supervisor/conf.d/*.ini #若你本地无/etc/supervisor目录,请自建

3.3supervisor组件

这个是我从网上找的一个关于supervisor组件相关的,具体的可以查询官网

1.supervisord

supervisord是supervisor的服务端程序。

干的活:启动supervisor程序自身,启动supervisor管理的子进程,响应来自clients的请求,重启闪退或异常退出的子进程,把子进程的stderr或stdout记录到日志文件中,生成和处理Event

2.supervisorctl

这东西还是有点用的,如果说supervisord是supervisor的服务端程序,那么supervisorctl就是client端程序了。supervisorctl有一个类型shell的命令行界面,我们可以利用它来查看子进程状态,启动/停止/重启子进程,获取running子进程的列表等等。。。最牛逼的一点是,supervisorctl不仅可以连接到本机上的supervisord,还可以连接到远程的supervisord,当然在本机上面是通过UNIX socket连接的,远程是通过TCP socket连接的。supervisorctl和supervisord之间的通信,是通过xml_rpc完成的。    相应的配置在[supervisorctl]块里面

3.Web Server

Web Server主要可以在界面上管理进程,Web Server其实是通过XML_RPC来实现的,可以向supervisor请求数据,也可以控制supervisor及子进程。配置在[inet_http_server]块里面

4.XML_RPC接口

这个就是远程调用的,上面的supervisorctl和Web Server就是它弄的

3.4配置了web页面;ip:9001端口访问

 

4、配置文件

[program:test]
directory = /home/leon/projects/usercenter ; 程序的启动目录
command = gunicorn -c gunicorn.py wsgi:app  ; 启动命令,可以看出与手动在命令行启动的命令是一样的
autostart = true     ; 在 supervisord 启动的时候也自动启动
startsecs = 5        ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true   ; 程序异常退出后自动重启
startretries = 3     ; 启动失败自动重试次数,默认是 3
user = leon          ; 用哪个用户启动
redirect_stderr = true  ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB  ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20     ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /data/logs/usercenter_stdout.log

; 可以通过 environment 来添加需要的环境变量,一种常见的用法是修改 PYTHONPATH
; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere

5、启动  

 5.1启动

supervisord -c /disk/supervisor/supervisord.conf 启动
ps aux | grep supervisord 查看是否运行
supervisorctl reload 修改program配置参数

 5.2命令

supervisord : 启动supervisor
supervisorctl reload :修改完配置文件后重新启动supervisor
supervisorctl status :查看supervisor监管的进程状态
supervisorctl start 进程名 :启动XXX进程
supervisorctl stop 进程名 :停止XXX进程
supervisorctl stop all:停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
supervisorctl update:根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启
supervisorctl -c /disk1/supervisor/supervisord.conf

6、问题

6.1 Error: Another program is already listening on a port that one of our HTTP servers is configured to

解决方案:网上两种方案,经试验都可以
(1)杀进程
ps -aux|grep supervisord 查看进程代号
kill -9 进程代号

(2)执行下面语句

  unlink /var/run/supervisor.sock
  unlink /tmp/supervisor.sock

6.2 error: <class 'socket.error'>, [Errno 2] No such file or directory: file: /usr/lib64/python2.7/socket.py line: 224

 解决方案:supervisord -c /disk1/supervisor/supervisord.conf来启动

6.3 unix:///var/run/supervisor/supervisor.sock no such file

创建文件

sudo touch 文件地址 例如 sudo touch /var/run/supervisor/supervisor.sock
如果不是root权限,需要给与权限
sudo chmod 777 文件地址 例如: sudo chmod 0777 /var/run/supervisor/supervisor.sock

6.4  Unlinking stale socket /var/run/supervisor.sock

unlink sock文件地址
unlink /var/run/supervisor/supervisord.sock

  大概在我安装遇到的问题还有情况就这样,其他的后续更新

 

posted @ 2022-11-08 18:08  清华大咖  阅读(152)  评论(0编辑  收藏  举报