关于supervisor:解决supervisor不能监控程序子进程问题

先说一下遇到的问题,应用的是beanstalk队列,有两个tube, 应用 supervisor 监控 beanstalk 生产队列(主过程A),主过程A产生两个子过程(子过程B,子过程C),每个子过程解决一个tube的数据。 supervisor配置如下: [program:queue-worker]command=/usr/local/bin/php /var/www/html/ctc/console.php queue workeruser=www-dataautostart=trueautorestart=trueredirect_stderr=truestartretries=30startsecs=10解决生产队列的代码如下: /** * 启动生产队列 * * @command php console.php queue worker */public function wokerAction(){ echo "------ worker start ------" . PHP_EOL; $beanstalk = $this->getBeanstalk(); $logger = $this->getLogger('queue'); $beanstalk->addWorker( 'main', function (BeanstalkJob $job) use ($config, $logger) { $taskId = $job->getBody(); try { $manager = new MainQueue(); $manager->handle($taskId); } catch (\Throwable $e) { $logger->error("tube:main, task:{$taskId} exception " . kg_json_encode([ 'file' => $e->getFile(), 'line' => $e->getLine(), 'message' => $e->getMessage(), ])); } exit(0); } ); $beanstalk->addWorker( 'notice', function (BeanstalkJob $job) use ($config, $logger) { $taskId = $job->getBody(); try { $manager = new NoticeQueue(); $manager->handle($taskId); } catch (\Throwable $e) { $logger->error("tube:notice, task:{$taskId} exception " . kg_json_encode([ 'file' => $e->getFile(), 'line' => $e->getLine(), 'message' => $e->getMessage(), ])); } exit(0); } ); $beanstalk->doWork();}常常会呈现上面的报错,子过程B或者C就退出了,然而主过程没事。 ...

July 4, 2023 · 2 min · jiezi

关于supervisor:supervisor-指定-python-版本

pkg_resources.DistributionNotFound: The 'supervisor==3.4.0' distribution was not found and is required by the application有时零碎装置了 python3 和 python2,且 python3 为默认版本,装置启动 supervisor 时就报错了。 yum install supervisor编辑以下3个文件,将结尾的 python 解释器门路指定为 2 版本的即可。 vim /usr/bin/echo_supervisord_confvim /usr/bin/supervisorctlvim /usr/bin/supervisord启动 systemctl start supervisord.service

April 17, 2022 · 1 min · jiezi

关于supervisor:supervisor-遇到的两个问题

问题1 refused connection问题景象$ supervisorctl -c /root/ppe-detection/supervisord.confunix:///root/supervisor.sock refused connection起因剖析supervisor 次要蕴含2个组件(理论还有别的): supervisord主过程,负责管理过程的server,它会依据配置文件创立指定数量的应用程序的子过程,治理子过程的整个生命周期,对crash的过程重启,对过程变动发送事件告诉等。supervisorctl客户端的命令行工具,提供一个相似shell的操作接口每次应用 supervisorctl,须要先保障supervisord失常运行。 解决办法# 1. 须要把之前开启的对于supervisor的都kill掉,先查看supervisor(自身也是基于python的)和其运行的python过程$ ps aux | grep python# kill能够上面这条指令,把supervisor和其运行的python过程全杀了$ ps -ef | grep python | grep -v grep | awk '{print $2}' | xargs kill -9# 2. 从新开启supervisord$ sudo supervisord -c supervisord.conf# 3. 如果没有报错,则能够应用supervisorctl了$ supervisorctl问题2 unlinking stale socket问题景象$ sudo supervisord -c supervisord.confUnlinking stale socket /{some_dir}/supervisor.sock问题剖析它说正在解除连贯旧socket,那么帮它间接解除就好了。 问题解决$ sudo supervisord -c supervisord.confUnlinking stale socket /{some_dir}/supervisor.sock# 应用unlink指令,把下面这个supervisor.sock的门路复制下来$ unlilnk /{some_dir}/supervisor.sock# 而后就能够失常应用了$ sudo supervisord -c supervisord.conf$ supervisorctlreferencesupervisor原理及如何应用linux下3种高效Kill掉所有python过程的办法(包含编写运行脚本 .sh) ...

August 19, 2021 · 1 min · jiezi

关于supervisor:Linux-centos-安装-supervisor-管理-Laravel-队列

装置supervisor yum install supervisor装置后通常会在/etc/目录下生成一个supervisord.conf文件和supervisord.d目录,配置文件通常都是放在这个目录下的 关上/etc/supervisord.conf文件,最初一行会有 [include]files = supervisord.d/*.ini了解为加载supervisord.d文件夹下的所有.ini文件 那我配置就写在这里 创立laravel-worker.ini文件,内容如下,具体参数依据你的理论状况来更改 [program:laravel-worker]process_name=%(program_name)s_%(process_num)02dcommand=php /data/www/YouProjectDirectory/artisan queue:work --sleep=3 --tries=3autostart=trueautorestart=trueuser=apachenumprocs=8redirect_stderr=truestdout_logfile=/data/www/YouProjectDirectory/storage/logs/worker.log上述配置中numprocs 指令让 Supervisor 运行 8 个 queue:work 过程并监督它们,如果失败的话主动重启,当然,你须要批改 queue:work sqs 的 command 指令来映射你的队列连贯 当创立配置文件后,须要刷新 Supervisor 的配置信息并应用如下命令启动过程: sudo supervisordsudo supervisorctl rereadsudo supervisorctl updatesudo supervisorctl start laravel-worker:*如果启动时报laravel-worker: added process group谬误,大概率是你引入配置文件这块出错了,查看下你的.ini配置文件地位对不对,通常间接丢在supervisord.d目录中就能够,前提你没更改过supervisord.conf文件中include file的地位 开机启动服务systemctl enable supervisord验证一下是否为开机启动systemctl is-enabled supervisord2021.06.10 上海南京西路

June 10, 2021 · 1 min · jiezi

关于supervisor:Supervisor-开始

Supervisor 是 Linux/Unix 操作系统上的过程管理工具。本文介绍了于 Ubuntu 18 上如何应用 Supervisor 开机启动、保活守护本人的服务过程。 装置倡议零碎形式装置,可开机启动。 sudo apt install supervisor -ySystemd 查看服务状态: $ sudo systemctl status supervisor● supervisor.service - Supervisor process control system for UNIX Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2021-06-08 18:00:00 CST; 4min 0s ago Docs: http://supervisord.org Main PID: 26297 (supervisord) Tasks: 1 (limit: 4915) CGroup: /system.slice/supervisor.service └─26297 /usr/bin/python /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf6月 08 18:00:00 john-ubuntu18 systemd[1]: Started Supervisor process control system for UNIX.6月 08 18:00:00 john-ubuntu18 supervisord[26297]: 2021-06-08 18:00:00,422 CRIT Supervisor running as root (no user in config file)6月 08 18:00:00 john-ubuntu18 supervisord[26297]: 2021-06-08 18:00:00,422 WARN No file matches via include "/etc/supervisor/conf.d/*.conf"6月 08 18:00:00 john-ubuntu18 supervisord[26297]: 2021-06-08 18:00:00,428 INFO RPC interface 'supervisor' initialized6月 08 18:00:00 john-ubuntu18 supervisord[26297]: 2021-06-08 18:00:00,428 CRIT Server 'unix_http_server' running without any HTTP authentication checki6月 08 18:00:00 john-ubuntu18 supervisord[26297]: 2021-06-08 18:00:00,428 INFO supervisord started with pid 26297Loaded: 配置门路; 开机启动状态Active: 活动状态Main PID: 主过程 IDTasks: 工作数量CGroup: 子过程树Systemd 的服务配置: ...

June 8, 2021 · 6 min · jiezi

关于supervisor:正确离线安装supervisor

正确离线装置supervisorsupervisor简介supervisor是一个用python语言编写的过程管理工具,它能够很不便的监听、启动、进行、重启一个或多个过程。当一个过程意外被杀死,supervisor监听到过程死后,能够很不便的让过程主动复原,不再须要程序员或系统管理员本人编写代码来管制。 supervisor 会波及三个重要的命令supervisord能够了解成supervisor的服务端 运行supervisor时会启动一个过程supervisord,它负责启动所治理的过程,并将所治理的过程作为本人的子过程来启动,而且能够在所治理的过程呈现解体时主动重启 supervisorctl能够了解成supervisor的客户端 supervisorctl是命令行管理工具,能够用如下命令来进行子过程的治理,如: echo_supervisord_conf用来生成默认的配置文件,个别生成默认文件为 supervisor.conf supervisor装置的后期筹备(全副应用压缩包的形式) supervisor是用python写的运行在linux下的过程管理工具,装置supervisor的时候依赖 python的一些包,它依赖:python、setuptools、meld3 1、python装置能够参考此处装置python:https://www.cnblogs.com/winte... 下载python链接:https://www.python.org/ftp/py... 下载相应的压缩包,如:wget https://www.python.org/ftp/py... tar -xvf Python-3.6.8.tgz2、setuptools装置https://pypi.python.org/pypi/...下载压缩包,用tar解压压缩包,装置,如 tar -zxvf setuptools-0.6c11.tar.gz cd setuptools-0.6c11 python setup.py install3、meld3装置https://pypi.python.org/pypi/... wget https://pypi.python.org/packa... tar -zxvf meld3-1.0.2.tar.gz cd meld3-1.0.2 python setup.py install4、supervisor装置tar -zxvf supervisor-3.3.1.tar.gz cd supervisor-3.3.1 python setup.py install此处 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 --help supervisor配置创立必要目录和文件创立 /etc/supervisor 目录mkdir /etc/supervisorecho_supervisord_conf 生成supervisord.confecho_supervisord_conf > /etc/supervisor/supervisord.conf批改/etc/supervisor/supervisord.conf文件内容 将unix_http_server 下的 file 门路改掉,如下:[unix_http_server] file=/var/run/supervisor.sock ; (the path to the socket file) ...

April 3, 2021 · 2 min · jiezi