如何停止节点js服务器作为服务运行

时间:2019-06-29 07:33:55

标签: node.js linux

我在节点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/");

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找类似的东西?

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

这是拦截kill命令并正常关闭服务器,而不是在没有警告的情况下突然停止进程。

要优雅地结束该过程,您可以只使用kill <PID>命令,因为SIGTERM是默认值。但是,如果您想确保已使用sigterm,则可以始终选择使用kill -SIGTERM <PID>,它会发送SIGTERM

  

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

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