Node.js 如何停止作为服务运行的node js服务器
我在NodeJS中编写了一个小服务器,在启动时作为服务启动 My/etc/init.d/lightserver如下所示:Node.js 如何停止作为服务运行的node js服务器,node.js,linux,Node.js,Linux,我在NodeJS中编写了一个小服务器,在启动时作为服务启动 My/etc/init.d/lightserver如下所示: # Actions case "$1" in start) # START /usr/bin/lightserver ;; stop) # STOP ;; restart) # RESTART ;; esac exit 0 我希望能够使用“
# Actions
case "$1" in
start)
# START
/usr/bin/lightserver
;;
stop)
# STOP
;;
restart)
# RESTART
;;
esac
exit 0
我希望能够使用“/etc/init.d/lightserver stop”命令正确停止服务器。不使用kill或killall
如何在我的服务器中实现此功能
var i = 0;
var connect = require('connect');
var sleep = require('sleep');
var exec = require('child_process').exec;
var j = 1;
var server = connect().
use(function(req, res) {
i++;
res.write('Hello World! ' + i);
res.end();
let code = 83028 + j;
j = 1 - j;
exec("./433Utils/RPi_utils/codesend " + code, function(error, stdout, stderr) {
console.log(stdout);
});
}).listen(64084);
console.log("Server has started and is listening to http://localhost:64084/");
我想你在找这样的东西
process.on('SIGTERM', () => {
// some other cleanup code
server.close();
});
这样做的目的是拦截kill命令并优雅地关闭服务器,而不是在没有警告的情况下突然停止进程
要优雅地结束该过程,您可以使用kill
命令,因为SIGTERM
是默认值。但是如果您想确保使用了sigterm,您可以始终选择使用kill-sigterm
,这将发送一个sigterm
kill的默认信号是TERM。使用-l或-l列出可用的
信号。特别有用的信号包括HUP、INT、KILL、STOP、,
续,0。可通过三种方式指定备用信号:-9
-SIGKILL-KILL。负PID值可用于选择整个系统
过程组;请参见ps命令输出中的PGID列。PID为-1
是特殊的;它指示除kill进程本身之外的所有进程
和init
是的。在/etc/init.d/lightserver中如何看待stop命令呢?我已经更新了我的答案,但基本上你可以使用kill或killall命令,你无法绕过这些命令(有很多方法,比如通过套接字执行命令,但这不是linux的方法)。如何知道PID?是不是除了ps-eF | grep lightserver之外的另一种方式?还是应该将我的服务器的当前PID写入文件?服务器正在运行,但pidof lightserver不返回任何内容。你们知道为什么吗?若你们并没有改变它,它可能在节点下。您是否设置了
process.title='lightserver'
?