当前位置:  开发笔记 > 编程语言 > 正文

如何停止应用node.js表达'npm start'

如何解决《如何停止应用node.js表达'npmstart'》经验,为你挑选了6个好方法。

您使用express v4.x构建node.js应用程序,然后通过npm start启动您的应用程序.我的问题是如何停止应用程序?有没有停止

编辑以在实现npm stop时包含错误

/home/nodetest2# npm stop

> nodetest2@0.0.1 stop /home/nodetest2
> pkill -s SIGINT nodetest2

pkill: invalid argument for option 's' -- SIGINT

npm ERR! nodetest2@0.0.1 stop: `pkill -s SIGINT nodetest2`
npm ERR! Exit status 2

Evan Carroll.. 59

是的,npm也提供了一个停止脚本:

npm help npm-scripts

prestop,stop,poststop:由npm stop命令运行.

在package.json中设置上面的一个,然后使用 npm stop

npm help npm-stop

如果你进入app.js,你可以让这很简单,

process.title = myApp;

然后在scripts.json中,

"scripts": {
    "start": "app.js"
    , "stop": "pkill --signal SIGINT myApp"
}

也就是说,如果这是我,我会使用pm2或者根据git push自动处理的东西.



1> Evan Carroll..:

是的,npm也提供了一个停止脚本:

npm help npm-scripts

prestop,stop,poststop:由npm stop命令运行.

在package.json中设置上面的一个,然后使用 npm stop

npm help npm-stop

如果你进入app.js,你可以让这很简单,

process.title = myApp;

然后在scripts.json中,

"scripts": {
    "start": "app.js"
    , "stop": "pkill --signal SIGINT myApp"
}

也就是说,如果这是我,我会使用pm2或者根据git push自动处理的东西.


@EvanCarroll如果正在运行多个应用程序实例,该怎么办?

2> danday74..:

此处的所有其他解决方案均取决于操作系 任何操作系统的独立解决方案都使用socket.io,如下所示.

package.json 有两个脚本:

"scripts": {
  "start": "node server.js",
  "stop": "node server.stop.js"
}
server.js - 你平常的快递东西住在这里
const express = require('express');
const app = express();
const server = http.createServer(app);
server.listen(80, () => {
  console.log('HTTP server listening on port 80');
});

// Now for the socket.io stuff - NOTE THIS IS A RESTFUL HTTP SERVER
// We are only using socket.io here to respond to the npmStop signal
// To support IPC (Inter Process Communication) AKA RPC (Remote P.C.)

const io = require('socket.io')(server);
io.on('connection', (socketServer) => {
  socketServer.on('npmStop', () => {
    process.exit(0);
  });
});
server.stop.js
const io = require('socket.io-client');
const socketClient = io.connect('http://localhost'); // Specify port if your express server is not using default port 80

socketClient.on('connect', () => {
  socketClient.emit('npmStop');
  setTimeout(() => {
    process.exit(0);
  }, 1000);
});
测试一下

npm start (像往常一样启动服务器)

npm stop (现在这将停止正在运行的服务器)

上面的代码还没有经过测试(它是我的代码的缩减版本,我的代码确实有效)但希望它可以正常工作.无论哪种方式,如果您想使用socket.io来停止服务器,它提供了一般方向.


这种方法的优点在于,您基本上可以使它在任何环境(包括容器)上运行,这些环境通常对您处理流程的方式有很大的限制。从我个人的角度来看-这是最优雅的方法。

3> 小智..:

当我尝试建议的解决方案时,我意识到我的应用名称被截断了.我process.title在nodejs文档(https://nodejs.org/docs/latest/api/process.html#process_process_title)中读到了它,它说

在Linux和OS X上,它仅限于二进制名称的大小加上命令行参数的长度,因为它会覆盖argv内存.

我的应用程序不使用任何参数,所以我可以将这行代码添加到我的 app.js

process.title = process.argv[2];

然后将这几行添加到我的package.json文件中

  "scripts": {
    "start": "node app.js this-name-can-be-as-long-as-it-needs-to-be",
    "stop": "killall -SIGINT this-name-can-be-as-long-as-it-needs-to-be"
  },

使用非常长的进程名称. 当然npm start,npm stop工作npm stop总是会终止所有正在运行的进程,但这对我来说没问题.



4> 小智..:

这是薄荷版本的问题,也可以使用cmd。要终止服务器进程,只需运行以下命令:

    taskkill -F -IM node.exe



5> Samuel Ivan..:

检查netstat -nptl所有进程

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      1736/mongod     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1594/sshd       
tcp6       0      0 :::3977                 :::*                    LISTEN      6231/nodejs     
tcp6       0      0 :::22                   :::*                    LISTEN      1594/sshd       
tcp6       0      0 :::3200                 :::*                    LISTEN      5535/nodejs 

它只是通过PID引用来杀死进程....在我的情况下,我想停止6231/nodejs,所以我执行以下命令:

kill -9 6231



6> overcomer..:

在MAC OS X(/ BSD)上:您可以尝试使用lsof(列出打开的文件)命令

$ sudo lsof -nPi -sTCP:LISTEN

所以

$ kill -9 3320

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有