我正在运行几个 PHP CLI 脚本并通过 Supervisor 监控它们。
当我用来supervisorctl
监视它们时,脚本显示如下:
cleanup RUNNING pid 1805, uptime 0:00:41
postsales RUNNING pid 1825, uptime 0:00:10
rebills RUNNING pid 1823, uptime 0:00:19
subscribers RUNNING pid 1827, uptime 0:00:10
但是,当我发出时stop all
,supervisorctl 冻结,我需要按 CTRL+C 才能退出。
当我下次运行时supervisorctl
,状态如下所示:
cleanup RUNNING pid 1935, uptime 0:00:44
postsales RUNNING pid 1953, uptime 0:00:05
rebills STOPPED Jul 19 12:23 PM
subscribers RUNNING pid 1951, uptime 0:00:05
即,只有一个进程停止,其他进程继续运行。
如果我发出更多stop all
命令,就会发生同样的事情 - 一个脚本尝试退出,其余脚本挂起。
我尝试修改supervisord.conf文件以防STOPSIGNAL=KILL
PHP脚本无法正确处理默认TERM信号,但还是发生了同样的事情。
有没有什么方法可以可靠地使用supervisorctl和我的脚本来随意正确启动和停止它们?
答案1
我在使用带有 Supervisor 2 的 CentOS 6 时遇到了同样的问题。我假设您运行了类似的配置。
就我而言,升级解决了这个问题。但是,我的系统没有可用的最新监督二进制包。因此,我进行了以下更新:
首先,下载以下源 RPM supervisor-3.0-0.5.a10.fc16.src.rpm
(可从此处获取):http://dl.fedoraproject.org/pub/fedora/linux/releases/16/Everything/source/SRPMS/supervisor-3.0-0.5.a10.fc16.src.rpm)。如果您尝试使用较新的源包,构建可能会失败,并且您可能会陷入依赖地狱。
使用以下方式安装rpm-build
包:
yum install rpm-build
然后尝试使用以下命令进行构建,
rpmbuild --rebuild supervisor-3.0-0.5.a10.fc16.src.rpm
如果失败,请使用 yum 安装任何所需的依赖项。
yum install <dependencies>
然后尝试再次构建:
rpmbuild --rebuild supervisor-3.0-0.5.a10.fc16.src.rpm
然后您将能够安装supervisord并且问题将消失!
yum install ~/rpmbuild/RPMS/noarch/supervisor-3.0-0.5.a10.el6.noarch.rpm