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

supervisor从不挂进程安装使用

时间:2023-03-29 20:08:38 PHP

使用Tp的消息队列think-queue时,进程意外结束!结果,项目无法运行;所以使用主管;接下来,我将与大家分享我的经验和安装使用方法;官网:http://supervisord.org/introd...首先,安装的方式有很多种;01:wget下载压缩包:cd/usr/local/lee#这个lee是我自己创建的目录wgethttps://pypi.python.org/packages/7b/17/88adf8cb25f80e2bc0d18e094fcd7ab300632ea00b601cbbbb84c2419eae/supervisor-3.3.2.tar。gztar-zxvfsupervisor-3.3.2.tar.gzcdstup0python-all-python2.2visor:yum安装:yuminstallpython-setuptoolseasy_installsupervisor我们在安装的时候使用wget;然后生成配置文件:mkdir/etc/supervisorecho_supervisord_conf>/etc/supervisord.conf打开配置文件修改一些东西;vim/etc/supervisord.conf将最下面的;[include];files=relative/directory/*.ini改为:[include]files=/etc/supervisor/*.conf(注意去掉分号,因为第一次安装时分号没有去掉有问题!);之后创建一个随机后缀为.conf的文件,我这里创建一个test.conf文件;我的项目在/www/wwwroot/admin/目录下:vimtest.conf#write输入一些配置:[program:test]#设置进程的名称,使用supervisorctl管理时需要用到进程名称过程,我这里称之为测试!command=phpthinkqueue:work--queuesaveLoginLog--daemon--tries10;#这是队列目录执行的命令=/www/wwwroot/admin;#命令执行所在目录或执行命令前,先切换到工作目录,可以理解为执行命令前先切换到本目录process_name=%(process_num)02d;#默认为%(program_name)s,即[program:x]中的x为进程名。如果下面的numprocs参数是1,这个参数不用管。它的默认值是%(program_name)s就是上面程序冒号后面的numprocs=5;#当进程数不为1时,是进程池的概念,注意process_nameautostart=true的设置;#是否自动启动autorestart=true;#程序是否意外退出,是否自动重启startssecs=1;自动重启间隔startretries=20;当进程启动失败时,尝试启动的最大次数。当超过3次时,supervisor会将此进程的状态设置为FAIL,默认值为3。。重定向标准错误=真;如果为真,stderr日志将写入stdout日志文件。理解为重定向输出日志user=root;当我们以root用户启动supervisord时,这个参数可以设置一个非root用户。我这里设置的用户也可以管理supervisordstdout_logfile=/www/wwwroot/admin/test.out.log;子进程stdout的日志路径输出日志文件stderr_logfile=/www/wwwroot/admin/test。错误日志;redirect_stderr=true时的错误日志文件。这个不用上面注释了,看起来有点乱,写一个不注释的吧:[program:test]command=phpthinkqueue:work--queuesaveLoginLog--daemon--tries10directory=/www/wwwroot/adminprocess_name=%(process_num)02dnumprocs=5autostart=trueautorestart=truestartsecs=1startretries=20redirect_stderr=trueuser=rootstdout_logfile=/www/wwwroot/admin/test.out.logstderr_logfile=/www/wwwroot/admin/test.err.log执行后start:supervisord-c/etc/supervisord.confsupervisorctlreload执行的时候遇到了错误,下面会讲到错误处理的问题和解决方法;现在让我们测试一下;测试时先执行stop停止进程,然后打开一个terminal连接redis,我们执行login,执行后,login后的队列任务会一直存在redis中;supervisorctlstoptest或者直接supervisorctlstopall可以看到没有执行!现在我们启动supervisorctl测试进程,然后让我谈谈问题:问题1:Unlinkingstalesocket/tmp/supervisor.sockor:Error:AnotherprogramalreadylistenonaportwhichanHTTPserverisconfiguredtouse.在启动supervisord之前先关闭这个程序。解决方法:sudounlink/tmp/supervisor.sock或sudounlink/var/run/supervisor.sock问题二:放弃:redisenteredFATALstate、太多启动重试太快解决方法:修改redis.conf的daemonize为no暂时没发现其他问题;我在测试的时候可以执行进程kill,所以重启服务器吧!