【问题标题】:How to stop a node js server running as service如何停止作为服务运行的节点 js 服务器
【发布时间】:2019-06-29 07:33:55
【问题描述】:

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

我的 /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/");

【问题讨论】:

    标签: node.js linux


    【解决方案1】:

    我认为您正在寻找这样的东西?

    process.on('SIGTERM', () => {
      // some other cleanup code
      server.close();
    });
    

    它的作用是拦截 kill 命令并优雅地关闭服务器,而不是突然停止进程,而不发出警告。

    要优雅地结束进程,您可以使用kill <PID> 命令,因为SIGTERM 是默认值。但是,如果您想确保使用 sigterm,您可以随时选择使用kill -SIGTERM <PID>,这将发送SIGTERM

    kill 的默认信号是 TERM。使用 -l 或 -L 列出可用 信号。特别有用的信号包括 HUP、INT、KILL、STOP、 CONT 和 0。可以通过三种方式指定备用信号:-9 -SIGKILL -杀死。负 PID 值可用于选择整体 进程组;请参阅 ps 命令输出中的 PGID 列。 -1 的 PID 很特别;它表示除kill进程本身之外的所有进程 并初始化。

    http://linuxcommand.org/lc3_man_pages/kill1.html

    【讨论】:

    • 是的。以及如何查看 /etc/init.d/lightserver 中的停止命令?
    • 我已经更新了我的答案,但是您基本上可以使用 kill 或 killall 命令,您无法绕过这些命令(有一些方法,例如通过套接字的命令,但这不是 linux 的方法)。
    • 以及如何知道PID?除了ps -eF | grep lightserver 之外还有另一种方式吗?还是应该将我的服务器当前的 PID 写入文件?
    • 服务器正在运行,但 pidof lightserver 没有返回任何内容。你知道吗,为什么?
    • 如果您没有更改它,它可能在节点下。你设置process.title = 'lightserver'了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 2015-01-28
    • 2012-12-27
    • 2017-05-09
    • 1970-01-01
    相关资源
    最近更新 更多