Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何停止作为服务运行的node js服务器_Node.js_Linux - Fatal编程技术网

Node.js 如何停止作为服务运行的node js服务器

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 我希望能够使用“

我在NodeJS中编写了一个小服务器,在启动时作为服务启动

My/etc/init.d/lightserver如下所示:

# 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'