Supervisor安装配置(linux/unix进程管理工具)Supervisor(http://supervisord.org)是一个用Python开发的client/server服务,是Linux/Unix系统的进程管理工具不支持Windows系统。它可以轻松地监视、启动、停止和重新启动一个或多个进程。使用Supervisor管理的进程,当一个进程被意外杀死时,supervisort会在监测到该进程死亡后自动重启。由于Supervisor是Python开发的,安装前请检查系统是否安装了Python2.4及以上版本。下面介绍Supervisor在CentOS7.6和Python2.7.5环境下的安装配置步骤:实验环境系统平台cat/etc/redhat-releaseCentOSLinuxrelease7.6.1810(Core)Python版本python-VPython2.7.5如果是python版本低于2.6请升级,这里是安装python3.6.8的安装例子.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xztarxfPython-3.6.8.tar.xzcdPython-3.6.8./configure--prefix=/usr/local/python368make&&makeinstallecho'exportPATH=/usr/local/python368/bin:$PATH'>>/etc/profilesource/etc/profilepython3-V安装Supervisor安装Supervisor的方法有很多种。下面分别介绍三个。我这里使用的第三个是1.easy_install安装主管安装Python包管理工具(easy_install)easy_install是setuptools包中的一个命令。使用easy_install其实就是调用setuptools来完成安装模块的工作,所以直接安装setuptools即可:wgethttps://pypi.io/packages/source/s/setuptools/setuptools-33.1.1.zipunzipsetuptools-33.1.1.zipcdsetuptools-33.1.1pythonsetup.pyinstalleseasy_installsupervisor2,pip安装主管或者使用pip安装,前提是保证pip版本大于2.6pipinstallsupervisor3,yumepel-releaseinstallsupervisoryuminstall-yepel-release&&yuminstall-ysupervisorsuperviso命令supervisor安装完成后会生成三个执行程序:supervisorortd、supervisorctl、echo_supervisord_conf:Supervisord:用于管理supervisor自身的服务Supervisorctl:用于管理我们需要委托给supervisor工具的服务echo_supervisord_conf:用于生成supervisord的配置文件Supervisor的daemon服务(用于接收进程管理命令)Client(用于和daemon进程通信,发送指令管理进程)[root@Jumpserver/]#whichsupervisord/bin/supervisord[root@Jumpserver/]#whichsupervisorctl/bin/supervisorctl[root@Jumpserver/]#whichchecho_supervisord_conf/bin/echo_supervisord_conf通过运行echo_supervisord_conf配置Supervisor程序生成主管的initi化配置文件。如果使用yum安装,这一步可以省略,直接修改配置文件即可。步骤mkdir/etc/supervisord.decho_supervisord_conf>/etc/supervisord.conf修改配置文件。supervisor里面的配置文件很多,但是很多都是不修改就可以用的,我这里只修改了下面两项#修改socket文件的mode,默认是0700sed-i's/;chmod=0700/chmod=0766/g'/etc/supervisord.conf#在配置文件末尾添加下面两行包含/etc/supervisord目录sed-i'$a[include]\files=/etc/supervisord.d/*。conf'/etc/supervisord.conf写的是需要Supervisor管理的进程。Supervisor只能管理非dameon进程。比如默认的redis是在前台运行的,而Tomcat其实是通过startup.shshutdown.sh调用catalina.sh在后台运行的。catalina.sh默认是前台运行的程序,不能像Nginx一样管理非dameon进程。Tomcat由Supervisor管理。Tomcat安装如下:wgethttp://us.mirrors.quenda.co/apache/tomcat/tomcat-8/v8.5.47/bin/apache-tomcat-8.5.47.tar.gzyuminstalljava-1.8.0-openjdk。x86_64java-1.8.0-openjdk-devel.x86_64-ytarxfapache-tomcat-8.5.47.tar.gz-C/usr/local/mv/usr/local/apache-tomcat-8.5.47/usr/local/tomcat如果我们想让我们的应用程序被Supervisor管理,我们需要在/etc/supervisord目录下编写配置文件。Tomcat案例如下:vim/etc/supervisord.d/tomcat.conf[program:tomcat]#程序唯一名称目录=/usr/local/tomcat#程序路径命令=/usr/local/tomcat/bin/catalina.shrun#运行程序命令autostart=true#supervisord启动后tomcat是否启动。startssecs=10#如果启动10秒后没有异常退出,说明进程已经正常启动。默认值为1秒。false],默认是unexpected,表示进程被意外杀死后重启;表示如果进程没有被supervisord关闭,则认为是不当关闭,supervisord会重新启动进程,只能使用supervisorctl关闭,启动,重启操作startretries=3#自动次数启动失败重试,默认3user=root#用哪个用户启动进程,默认rootpriority=999#进程启动优先级,默认999,如果supervisord需要管理多个进程,那么值小的先启动stopsignal=INTredirect_stderr=true#RedirectstderrtostdoutstandardOutput,defaultfalsestdout_logfile_maxbytes=200MB#stdout标准输出日志文件大小,日志文件大小达到200M后会被切割,切割后的日志文件会被标记为catalina.out1,catalina.out2,catalina.out3...,defaultis50MBstdout_logfile_backups=100#stdout标准输出日志文件备份个数,保存100个200MB的日志文件,超过100个后旧的将被删除,默认为10个,保存10个stdout_logfile=/usr/local/tomcat/logs/catalina.out#StandardLog输出位置,如果输出位置不存在,则启动失败stopasgroup=false#默认为false,当进程被杀死时,是否发送停止信号到这个过程组,包括子processkillasgroup=false#默认为false,向进程组发送kill信号,包括子进程启动进程。使用supervisord管理启动后,当你使用/usr/local/tomcat/shutdown.sh或kill$PID时,supervisord会认为是意外关机,会自动再次拉起进程。除非用supervisord命令关闭#supervisordstartsupervisord-c/etc/supervisord.conf#启动supervisord进程,我们在配置文件中设置autostart=true参数,当supervisord启动时,tomcat也启动ps-ef|grepjava#查看tomcat是否启动 程序管理supervisorctlstatustomcat#tomcat状态supervisorctlstoptomcat#stoptomcatsupervisorctlstarttomcat#starttomcatsupervisorctlrestarttomcat#restarttomcatsupervisorctlreoloadtomcat#heavytomcatRedis由Supervisor管理。Redis默认不会在配置文件中添加daemonizeyes参数。该参数是前台启动的,所以也可以由我们的Supervisor来管理。usr/local/redis/run/redis6001.pid"loglevelnoticelogfile"/usr/local/redis/logs/redis6001.log"save9001stop-writes-on-bgsave-erroryesrdbcompressionyesrdbchecksumyesdbfilenamedump.rdbdir"/usr/local/redis/data/rdb/"timeout0tcp-keepalive300写一个redis由Supervisor管理的案例vim/etc/supervisord.d/redis.conf[program:redis]directory=/usr/local/rediscommand=/usr/local/redis/bin/redis-server/usr/local/redis/etc/redis6001.confautostart=truestartsecs=10autorestart=truestartretries=3user=rootpriority=999stopsignal=INTredirect_stderr=truestdout_logfile_maxbytes=200MBstdout_logfile_backups=100stdout_logfile=/usrilla/redis/logs/redis600startup/redis/alstopasls/local=redis6001.logstopaslsredis#closetomcatsupervisorctlstoptomcattomcat:停止#killsupervisordps-ef|grepsupervisordroot269271010:47?00:00:00/usr/bin/python/bin/supervisord-c/etc/supervisord.confroot2754927402011:07pts/200:00:00grep--color=autosuperkill-926927#重启supervisord使其重新加载配置文件,supervisord默认会同时拉起redis和tomcatsupervisord-c/etc/supervisord.conf程序管理supervisorctlstatusredis#redisstatussupervisorctlstopredis#stopredissupervisorctlstartredis#startredissupervisorctlrestartreids#restartredissupervisorctlreoloadredis#reloadredis程序管理程序管理supervisorctlstatusall#查看所有进程状态supervisorctlstopall#停止所有进程supervisorctlstartall#启动所有进程supervisorctlrestartall#重启所有进程supervisorctlreoloadall#重新加载所有进程supervisord启动配置vim/usr/lib/systemd/system/supervisord.service[Unit]Description=ProcessMonitoringandControlDaemonAfter=rc-local.servicenss-user-lookup.target[Service]Type=forkingExecStart=/usr/bin/supervisord-c/etc/supervisord.conf[安装]WantedBy=multi-user.targetsystemctlenablesupervisordsystemctlis-enabledsupervisord
