1.Supervisor工具的作用是什么?Supervisor是一套用Python开发的通用进程管理程序。它可以将一个普通的命令行进程变成后台守护进程,监控进程状态,异常退出时自动重启。看之前,先明确一下Supervisor的用途,它能帮到我们什么?1、部分脚本可以设置为后台运行,作为守护进程。2、监控进程的运行情况,遇到突发情况及时预警或重启,防止进程挂掉影响业务的正常运行。二、安装安装方法:1.pip安装(需要安装pip)pipinstallsupervisor2。yum安装配置yum源。yuminstall-ysupervisor安装supervisor时提示找不到supervisor,需要yuminstallepel-release先安装EPEL源)安装完成后使用supervisord-v查看版本。这里使用yum安装的3.4版本。3.使用echo_supervisord_conf>/etc/supervisord.conf创建官方默认配置文件(supervisord.conf主配置文件)到etc目录下。您可以根据自己的喜好修改配置文件设置。我自己修改了一些配置文件路径、日志路径等。可提供大家参考;示例主管配置文件。[unix_http_server]file=/var/supervisor/run/supervisor.sock;(套接字文件的路径);chmod=0700;sockef文件模式(默认0700);chown=nobody:nogroup;套接字文件uid:gidowner;username=user;(默认为无用户名(开放服务器));密码=123;(默认为无密码(打开服务器));[inet_http_server];inet(TCP)服务器默认禁用;port=127.0.0.1:9001;(ip_address:portspecifier,*:portforalliface);username=user;(默认为无用户名(开放服务器));密码=123;(默认为无密码(打开服务器))[supervisord]logfile=/var/supervisor/log/supervisord.log;(主日志文件;默认$CWD/supervisord.log)logfile_maxbytes=50MB;(最大主日志文件字节b4旋转;默认50MB)logfile_backups=10;(主日志文件轮换备份数;默认10)loglevel=info;(日志级别;默认信息;其他:调试、警告、跟踪)pidfile=/var/supervisor/run/supervisord.pid;(supervisordpidfile;defaultsupervisord.pid)nodaemon=false;(如果为true,则从前台开始;默认为false)minfds=1024;(min.availstartupfiledescriptors;default1024)minprocs=200;(最小可用进程描述符;默认200);umask=022;(进程文件创建umask;默认022);user=chrism;(默认是当前用户,如果是root则需要);identifier=supervisor;(supervisordidentifier,defaultis'supervisor');directory=/tmp;(默认情况下启动时不执行cd);nocleanup=true;(不要在开始时清理临时文件;默认为false);childlogdir=/tmp;('AUTO'子日志目录,默认$TEMP);environment=KEY=value;(要添加到环境的键值对);strip_ansi=false;(在日志中去除ANSI转义码;def.false);下面部分必须保留在RPC的配置文件中;(supervisorctl/webinterface)工作,额外的接口可能是;通过在单独的rpcinterface中定义它们来添加:sections[rpcinterface:supervisor]supervisor.rpcinterface_factory=supervisor.rpcinterface:make_main_rpcinterface[supervisorctl]serverurl=unix:///var/supervisor/run/supervisor.sock;将unix://URL用于unix套接字;serverurl=http://127.0.0.1:9001;使用http://url指定inet套接字;username=chris;如果设置,应该与http_username相同;password=123;如果设置,应该与http_password相同;prompt=mysupervisor;cmd行提示(默认“supervisor”);history_file=~/.sc_history;如果可用,请使用readline历史记录;下面的示例程序部分显示了所有可能的程序子部分值;创建一个或多个“真实”程序:能够在其下控制它们的部分;supervisor.;[program:theprogramname];command=/bin/cat;程序(相对使用PATH,可以带参数);process_name=%(program_name)s;process_nameexpr(default%(program_name)s);numprocs=1;要启动的进程副本数(def1);directory=/tmp;cwd到exec之前的目录(defnocwd);umask=022;进程的umask(默认无);优先级=999;相对启动优先级(默认999);autostart=true;从supervisord开始(默认值:true);autorestart=true;在意外退出时重新启动(默认值:true);startsecs=10;编程必须保持运行的秒数(def.1);startretries=3;串行启动失败的最大值(默认3);exitcodes=0,2;进程的“预期”退出代码(默认0,2);stopsignal=QUIT;用于终止进程的信号(默认TERM);stopwaitsecs=10;等待的最大秒数b4SIGKILL(默认10);我们呃=基督;设置此UNIX帐户的uid以运行程序;redirect_stderr=true;将procstderr重定向到stdout(默认为false);stdout_logfile=/a/path;stdout日志路径,NONE为无;默认AUTO;stdout_logfile_maxbytes=1MB;max#logfilebytesb4rotation(default50MB);stdout_logfile_backups=10;#stdout日志文件备份(默认10);stdout_capture_maxbytes=1MB;'capturemode'中的字节数(默认为0);stdout_events_enabled=false;在stdout写入时发出事件(默认为false);stderr_logfile=/a/path;stderr日志路径,NONE为无;默认自动;stderr_logfile_maxbytes=1MB;max#logfilebytesb4rotation(default50MB);stderr_logfile_backups=10;#stderr日志文件备份(默认10);stderr_capture_maxbytes=1MB;'capturemode'中的字节数(默认为0);stderr_events_enabled=false;在stderr写入时发出事件(默认为false);environment=A=1,B=2;过程s环境添加(defnoadds);serverurl=AUTO;覆盖serverurl计算(childutils);下面的示例事件监听器部分显示了所有可能;eventlistener分段值,创建一个或多个'real';eventlistener:能够处理事件通知的部分;由主管发送。;[eventlistener:theeventlistenername];command=/bin/eventlistener;程序(相对使用PATH,可以带参数);process_name=%(program_name)s;process_nameexpr(default%(program_name)s);numprocs=1;要启动的进程副本数(def1);events=EVENT;事件通知要订阅的类型(req'd);buffer_size=10;事件缓冲区队列大小(默认10);目录=/tmp;cwd到exec之前的目录(defnocwd);umask=022;进程的umask(默认无);优先级=-1;相对启动优先级(默认-1);autostart=t遗憾;从supervisord开始(默认值:true);autorestart=unexpected;在意外退出时重新启动(默认值:意外);startsecs=10;编程必须保持运行的秒数(def.1);startretries=3;串行启动失败的最大值(默认3);exitcodes=0,2;进程的“预期”退出代码(默认0,2);stopsignal=QUIT;用于终止进程的信号(默认TERM);stopwaitsecs=10;等待的最大秒数b4SIGKILL(default10);user=chrism;设置此UNIX帐户的uid以运行程序;redirect_stderr=true;将procstderr重定向到stdout(默认为false);stdout_logfile=/a/path;stdout日志路径,NONE为无;默认AUTO;stdout_logfile_maxbytes=1MB;max#logfilebytesb4rotation(default50MB);stdout_logfile_backups=10;#stdout日志文件备份(默认10);stdout_events_enabled=false;发出事件s在stdout上写入(默认false);stderr_logfile=/a/path;stderr日志路径,NONE为无;默认自动;stderr_logfile_maxbytes=1MB;max#logfilebytesb4rotation(default50MB);stderr_logfile_backups;#stderr日志文件备份(默认10);stderr_events_enabled=false;在stderr写入时发出事件(默认为false);environment=A=1,B=2;处理环境添加;serverurl=AUTO;覆盖serverurl计算(childutils);下面的示例组部分显示了所有可能的组值;创建一个或多个“真实”组:创建“异类”的部分;进程组。;[group:thegroupname];programs=progname1,progname2;每个在[program:x]definitions;priority=999中引用'x';相对启动优先级(默认999);[include]部分可以只包含“文件”设置。这;设置可以列出多个文件(由空格或换行符分隔)。它还可以续是通配符。文件名是;解释为相对于此文件。包含的文件*不能*;include文件本身。[include];files=supervisord.d/*.inifiles=/var/supervisor/conf/*.confmy在配置文件中,需要在/var/supervisor中创建3个文件夹,分别是conf、log、并运行。运行。文件夹下有supervisord.pid和supervisor.sockconf文件夹放配置文件(二级配置文件存放目录)log文件夹放日志文件。这样可以统一管理supervisor。更改配置文件后。如果启动了怎么办?安装supervisord会自动在/usr/bin目录下生成两条命令。使用supervisord命令启动supervisord-c/etc/supervisord.conf然后到/var/supervisor/conf目录下添加对应的子进程配置文件。我的子配置文件如下,写了具体的注释,大家可以根据需要修改相应的配置项。[program:time];项目名称directory=/home/wwwroor/test/public;程序启动目录,项目根目录上层command=/usr/local/php/bin/phpindex.phpapi/task/test;启动命令process_name=%(program_name)s_%(process_num)02dnumprocs=1;打开的进程数autostart=true;supervisord启动时也会自动启动startsecs=15;如果启动后5秒没有异常退出,则认为Autorestart=true已经正常启动;程序异常退出后自动重启startretries=300;启动失败自动重试次数,默认3user=root;哪个用户用于启动redirect_stderr=true;将stderr重定向到stdout,默认falsestdout_logfile_maxbytes=50MB;stdout日志文件大小,默认50MBstdout_logfile_backups=20;stdout日志文件备份号;stdout日志文件,需要手动创建目录(supervisord会自动创建日志文件)stdout_logfile=/var/supervisor/log/test.logloglevel=info主要是命令配置,需要写成daemon命令。然后重新加载配置$supervisorctlreread$supervisorctlupdate查看子进程的运行状态supervisorctlstatus这样,一些脚本就会以守护进程的形式运行,并对其进行监控。好吧,有了监控机制,项目的运行就稳定多了。先分享到这里,以后有新的经验再写。本文为叶宇文玲原创文章,转载无需联系本人,但请注明文章出处。文章来源:叶宇文玲的贴心文章https://segmentfault.com/a/11...
