supervisor的正确离线安装supervisor简介supervisor是一款用python语言编写的进程管理工具,可以方便地监控、启动、停止和重启一个或多个进程。当一个进程被意外杀掉时,supervisor监测到进程死掉了,可以方便的自动恢复进程,不需要程序员或者系统管理员写代码来控制。supervisor会涉及到三个重要的命令supervisord可以理解为supervisordserver在运行supervisor的时候会启动一个进程supervisord,它负责启动被管理进程,并将被管理进程作为自己的子进程启动,并且可以在supervisorctl的自动重启当托管进程崩溃时,可以理解为主管的客户。supervisorctl是一个命令行管理工具,可以使用如下命令来管理子进程,如:echo_supervisord_conf用于生成默认配置文件,一般生成默认文件supervisor.confsupervisor安装前准备(所有使用压缩包)supervisor是一个用python编写的进程管理工具,运行在linux下。安装supervisor时,依赖python的一些包,依赖:python、setuptools、meld31,python的安装可以参考这里安装python:https://www.cnblogs.com/winte...下载python链接:https://www.python.org/ftp/py...下载对应的压缩包,如:wgethttps://www.python.org/ftp/py...tar-xvfPython-3.6.8.tgz2,setuptoolsinstallhttps://pypi.python.org/pypi/...下载压缩包,使用tar解压压缩包,安装,如tar-zxvfsetuptools-0.6c11.tar.gzcdsetuptools-0.6c11pythonsetup.pyinstall3,meld3安装https://pypi.python.org/pypi/...wgethttps://pypi.python.org/packa...tar-zxvfmeld3-1.0。2.tar.gzcdmeld3-1.0.2pythonsetup.pyinstall4,supervisor安装tar-zxvfsupervisor-3.3.1.tar。gzcdsupervisor-3.3.1pythonsetup.pyinstall安装后会安装supervisor的地方创建以下我们关心的可执行程序:supervisord路径supervisord:/usr/local/bin/supervisordsupervisorctl路径supervisorctl:/usr/local/bin/supervisorctlecho_supervisord_conf路径echo_supervisord_conf:/usr/local/bin/echo_supervisord_conf验证supervisor安装成功supervisorctl--helpsupervisorconfiguration创建必要的目录和文件创建/etc/supervisor目录mkdir/etc/supervisorcho_supervisord_conf生成supervisord.confecho_supervisord_conf>/etc/supervisor/supervisord.conf修改/etc/supervisor/supervisord.conf文件的内容unix_http_server更改路径,如下:[unix_http_server]file=/var/run/supervisor.sock;(socket文件的路径)更改supervisord下的logfile路径和pidfile路径,如下:[supervisorctl]serverurl=unix:///var/run/supervisor.sock;对unixsocket使用unix://url改变include下文件的路径,如下:文件:touch/var/run/supervisor.socktouch/var/log/supervisord.logtouch/var/run//supervisord.pidmkdir/etc/supervisor/conf.d添加权限chmod777/var/runchmod777/变量/日志编辑编写需要监控的子流程程序。编写子程序配置文件。在/etc/supervisor/conf.d目录下创建自己的子进程配置文件,如:在/etc/supervisor/conf.d中创建文件test.conf[program:test]process_name=%(program_name)s_%(process_num)02dcommand=gorunmain.go#运行命令directory=/home/qb/#运行文件目录autostart=true#自动启动autorestart=true#自动重启user=root#哪个用户执行redirect_stderr=true#重定向error子程序编写其中,上面的main.go是我临时写的一个demo程序,简单循环1秒,将字符串写入文件(writetothefile为了方便查看效果),如:packagemainimport("fmt""os/exec""time")funcmain(){for{cmd:=exec.Command("/bin/bash","-c",`echo222>>a.txt`)stdout,err:=cmd.StdoutPipe()iferr!=nil{fmt.Printf("Error:cannotobtainstdoutpipeforcommand:%s\n",err)return}//执行命令iferr:=命令.开始();err!=nil{fmt.Println("Error:Thecommandiserr,",err)return}fmt.Println(stdout)time.Sleep(time.Second*time.Duration(1))}启动supervisor1,unlinkunlink/var/run/supervisor.sock2,启动supervisor:supervisord-c/etc/supervisor/supervisord.conf3.查看程序的运行状态。Supervisorctlstatus查看效果。子程序是每隔1秒将字符串222写入a.txt文件,进一步测试删除子进程,测试supervisor是否会拉起子进程。将supervisor添加到启动服务中1.写入服务文件vim/usr/lib/systemd/system/supervisord.servicesupervisord.service[Unit]Description=Supervisordaemon[Service]Type=forkingExecStart=/usr/local/bin/supervisord-c/etc/supervisor/supervisord.confExecStop=/usr/local/bin/supervisorctlshutdownExecReload=/usr/local/bin/supervisorctlreloadKillMode=processRestart=on-failureRestartSec=42s[安装]WantedBy=multi-user.target2,make可以服务systemctlenablesupervisord3.验证是否启用成功。systemctlis-enabledsupervisord出现enable表示成功。4.重启机器,验证supervisor是否通电。常用命令提示servicesupervisordstart#启动程序servicesupervisordstop#停止程序servicesupervisordstatus#查看状态supervisordctlshutdown#关闭所有任务supervisorctlstop|startSubroutinename#启动或停止服务supervisorctlstatus#查看所有任务状态异常,提供参考记得把所有的目录名和文件名都写对,别骗自己!!1.error:
