首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >监督停止命令中没有杀死所有生成的节点进程

监督停止命令中没有杀死所有生成的节点进程
EN

Stack Overflow用户
提问于 2021-05-11 13:39:51
回答 1查看 756关注 0票数 1

在使用supervisord部署新服务时,我遇到了一些奇怪的事情。以下是有关的部分:

代码语言:javascript
复制
# supervisord.conf

[program:express]
command=yarn re-express-start
代码语言:javascript
复制
# package.json
{
  "scripts": {
    "re-express-start": "node lib/js/client/Express.bs.js",
  }
}

当我运行supervisorctl start时,节点服务器将按预期的方式启动。但是在我运行supervisorctl stop之后,服务器继续运行,尽管主管认为它已经被杀死了。

如果我将supervisord.conf文件更改为直接执行node lib/js/client/Express.bs.js (而不通过yarn),那么它将如预期的那样工作。但是我想看一下package.json-defined脚本。

我研究了过程树的外观,但我不太明白为什么。下面是停止监督管理服务之前和之后的过程。

代码语言:javascript
复制
$ ps aux | grep node
user     12785  1.4  3.5 846404 72912 ?        Sl   16:30   0:00 node /usr/bin/yarn re-express-start
user     12796  0.0  0.0   4516   708 ?        S    16:30   0:00 /bin/sh -c node lib/js/client/Express.bs.js
user     12797  5.2  2.7 697648 56384 ?        Sl   16:30   0:00 /usr/bin/node lib/js/client/Express.bs.js
root     12830  0.0  0.0  14216  1004 pts/1    S+   16:30   0:00 grep --color=auto node

$ pstree -c -l -p -s 12785
systemd(1)───supervisord(7153)───node(12785)─┬─sh(12796)───node(12797)─┬─{node}(12798)
                                             │                         └─{node}(12807)
                                             ├─{node}(12786)
                                             └─{node}(12795)

$ supervisorctl stop express

$ ps aux | grep node
user     12797  0.7  2.7 697648 56384 ?        Sl   16:30   0:00 /usr/bin/node lib/js/client/Express.bs.js
root     12975  0.0  0.0  14216   980 pts/1    S+   16:32   0:00 grep --color=auto node

$ pstree -c -l -p -s 12797
systemd(1)───node(12797)─┬─{node}(12798)
                         └─{node}(12807)

$ kill 12797

$ ps aux | grep node
root     13426  0.0  0.0  14216   976 pts/1    S+   16:37   0:00 grep --color=auto node

从上面看,执行服务器内容的“实际”工作负载过程具有PID 12797。它是由监督者进程产生的,并嵌套在更多的几个下面。停止监控程序使用PID 1278512796停止进程,但不停止实际重新连接到init进程的12797

对这里发生了什么有什么想法吗?这是因为忽略了一些SIGxxx信号吗?我猜想是yarn调用在某种程度上吞噬了它们,但我不知道如何以及如何重新配置。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-09 22:47:22

在运行应用程序时,我也遇到了这个问题。问题似乎是我让主管打电话给npm start,这是指package.json start脚本。该脚本只需调用node app.js。解决方案似乎是直接从主管配置文件中调用该命令,如下所示:

代码语言:javascript
复制
[program:node]
...
command=node app.js
...
stopasgroup=true
stopsignal=QUIT

此外,我还添加了stopasgroup,并将stopsignal更改为退出。停止信号似乎是必要的,以正确地杀死这一过程。

现在,我可以自由地调用supervisorctl restart node:node_00,而不会出现任何ERROR (spawn error)错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67487983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档