当前位置: 首页 > 后端技术 > PHP

使用Supervisor管理进程

时间:2023-03-30 01:21:19 PHP

首发于范浩博科学院Supervisor是一个非常优秀的用Python开发的进程管理工具。允许用户在类UNIX系统上精确监控多组指定数量的服务进程。当被监控的服务进程意外退出时,它会尝试自动重启这些服务以保持服务可用。Supervisor官方提供了很多安装方法,这里我们使用pip来安装。安装pip$yuminstallpython-pip#升级pip$pipinstall--upgradepip$pip-Vpip9.0.1安装Supervisor通过pip安装Supervisor:$pipinstallsupervisor成功安装supervisor-3.3.3安装完Supervisor,supervisorctl和supervisord有两个程序,其中supervisorctl是服务监控终端,supervisord是所有监控服务的大脑。查看supervisord是否安装成功:$supervisord-v3.3.3startatboot配置supervisord为启动服务,下载官方init脚本。修改关键路径配置:PIDFILE=/var/run/supervisord.pidLOCKFILE=/var/lock/subsys/supervisordOPTIONS="-c/etc/supervisord.conf"把这个文件移动到/etc/init.d目录下,然后重新命名为supervisor,添加可执行权限:$chmod777/etc/init.d/supervisor配置为启动服务:$chkconfig--addsupervisor$chkconfigsupervisoron$chkconfig--list|grep"supervisor"supervisor0:off1:off2:on3:on4:on5:on6:offConfiguration生成配置文件Supervisord安装完成后,需要使用如下命令生成配置文件。$mkdir/etc/supervisor$echo_supervisord_conf>/etc/supervisor/supervisord.conf主要配置部分supervisord.conf主要配置部分说明:[unix_http_server]file=/tmp/supervisor.sock;套接字文件路径;chmod=0700;套接字文件权限;chown=没有人:没有群组;套接字文件用户和用户组;用户名=用户;连接时验证的用户名;密码=123;连接[inet_http_server]时验证密码;侦听TCPport=127.0.0.1:9001;监听ip和端口username=user;连接时用户名密码=123;连接时验证密码[supervisord]logfile=/var/log/supervisord.log;日志目录logfile_maxbytes=50MB;日志文件最大空间log??file_backups=10;保留的日志文件数loglevel=info;日志级别pidfile=/var/run/supervisord.pidnodaemon=false;是否以非守护进程模式运行minfds=1024;系统空闲的最小文件描述符minprocs=200;可用的最小进程描述符;umask=022;进程创建文件的掩码;identifier=supervisor;supervisord标识符;directory=/tmp;启动前切换到的目录;nocleanup=true;启动前是否清除子进程的日志文件;childlogdir=/tmp;AUTO模式,子进程的日志路径;environment=KEY="value";设置环境变量[rpcinterface:supervisor];XML_RPC配置supervisor.rpcinterface_factory=supervisor.rpcinterface:make_main_rpcinterface[supervisorctl]serverurl=unix:///tmp/supervisor.sock;连接的套接字路径;username=chris;username;password=123;passwordprompt=mysupervisor;输入用户名和密码时提示;history_file=~/.sc_history;历史操作记录存放路径[include];includefiles,将每个进程配置为一个文件,includefiles=/etc/supervisor/*.ini;多进程的配置文件这部分我们不需要做太多的配置修改,如果需要开启WEB端监控,需要配置开启inet_http_server项进程配置部分Supervisor需要管理的进程服务配置,示例如下:[program:work];服务名称,例如workcommand=php-r"sleep(10);exit(1);";带参数的可执行命令process_name=%(process_num)s;进程名,当numprocs>1时,必须包含%(process_num)snumprocs=2;启动进程数;directory=/tmp;运行前切换到该目录;umask=022;进程掩码Code;priority=999;子进程启动和关闭优先级autostart=true;子进程是否自动启动startsecs=1;启动成功几秒后,认为启动成功;startretries=3;子进程启动失败后,最大尝试启动次数Numberoftimesautorestart=unexpected;子进程意外退出后自动重启的选项,false,unexpected,true。unexpected表示当不在退出代码列表中时重新启动exitcodes=0,2;预期的子程序退出代码;停止信号=退出;进程停止信号,可以是TERM、HUP、INT、QUIT、KILL、USR1或USR2等信号,默认为TERM;stopwaitsecs=10;发送停止信号后等待的最长时间;stopasgroup=false;是否向子进程组发送停止信号;killasgroup=false;是否向子进程组发送kill信号;redirect_stderr=true;是否将日志重定向到标准Outputstdout_logfile=/data/logs/work.log;处理stdout日志路径;stdout_logfile_maxbytes=1MB;日志文件最大大小;stdout_logfile_backups=10;stdout_capture_maxbytes=1MB;stderr_logfile=/a/path;stderr_logfile_maxbytes=1MB;stderr_logfile_backups=10;stderr_capture_maxbytes=1MB;environment=A="1",B="2";子进程的环境变量;serverurl=AUTO;子进程的环境变量SUPERVISOR_SERVER_URL通常将各个进程的配置信息配置为Standalone文件,通过include模块包含,方便修改和管理配置文件。启动配置完成后,启动supervisord守护进程服务:$supervisord-c/etc/supervisor/supervisord.conf常用命令参数说明:-c:指定配置文件路径-n:是否运行在非守护进程state-l:日志文件目录-i:查看supervisord启动状态的唯一标识:$ps-ef|grep“supervisor”root2490110Sep23?00:00:30/usr/bin/python/usr/bin/supervisord-c/etc/supervisor/supervisord.conf$netstat-tunpltcp00127.0.0.1:90010.0.0.0:*LISTEN24901/python监控进程Supervisor提供了多种监控服务方式,包括supervisorctl命令行终端、Web终端、XML_RPC接口。命令终端可以直接使用supervisorctl在命令行终端查看所有服务的状态,如下:$supervisorctlwork:0RUNNINGpid31313,uptime0:00:07work:1RUNNINGpid31318,uptime0:00:06#-u用户名-p密码supervisorctl常用命令列表如下;status:查看服务状态update:重新加载配置文件restart:重启服务stop:停止服务pid:查看某个服务的pidtail:输出最新的日志信息shutdown:关闭supervisord服务Webin配置中启用inet_http_server后,您可以通过Web界面方便的监控流程服务。