2015-03-13 38 views
2

我有我的命令行运行,直到永远节点脚本:forever index.js在某些情况下,我可以永远防止重新启动我的节点脚本吗?

当该脚本崩溃,我想永远重新启动它,但不是所有的时间。我知道某些情况需要人工干预才能解决。在这些情况下,我希望能够以一种永远不会重新启动的方式退出流程。

有没有办法做到这一点?

我原本以为我可以用process.exit(1)重新启动进程,而不是用process.exit(0)重启,但显然情况并非如此。

这里是另一种方式把它:

  • 填写在下面的代码的空白。
  • 结果保存为index.js
  • 启动与forever index.js
  • 脚本的剧本应打印 “你好”,退出,而不是重新启动

    setTimeout(function() { 
        console.log("hello") 
        // YOUR CODE GOES HERE 
    }, 1500) 
    

由方式,延迟只是在默认情况下工作--minUpTime为1秒

回答

2

永远支持退出信号定制与--killSignal选项:

--killSignal  Support exit signal customization (default is SIGKILL), 
       used for restarting script gracefully e.g. --killSignal=SIGTERM 

以上是用于指示永远与杀信号停止脚本永远已经开始。要根据脚本退出的方式选择性地停止运行脚本,您需要使用forever-monitor

首先,你的脚本需要发送一个特定的信号,当你想永远地而不是重新启动它。下面是我们的script.js:

setTimeout(function() { 
    console.log('hello'); 

    //process.kill(process.pid, 'SIGKILL'); // this will cause forever to restart the script. 

    setTimeout(function() { 
     process.kill(process.pid, 'SIGTERM'); // this will cause forever to stop the script. 
    }, 1000); 
}, 2000); 

然后,我们需要一个额外的脚本永远显示器(姑且称之为脚本monitor.js):

var forever = require('forever-monitor'); 

var child = new (forever.Monitor)('script.js', { 
    max: 10, 
    silent: false, 
    args: [] 
}); 

child.on('restart', function() { 
    console.error('Forever restarting script for ' + child.times + ' time'); 
}); 

child.on('exit:code', function(code) { 
    console.error('Forever detected script exited with code ' + code); 
    if (143 === code) child.stop(); // don't restart the script on SIGTERM 
}); 

child.start(); 

现在可以运行的脚本。 js通过运行:node script-monitor.js

为方便起见,node.js中的信号事件here is a list

+0

我读过这个,但我不知道如何使用它。当我'process.exit()',我可以传入一个整数。我无法通过SIGTERM或SIGKILL。另外,killSignal实际上做了什么?如果我将它设置为SIGTERM,将会停止发生什么样的默认行为?什么新行为出现? – Shawn 2015-03-13 16:10:04

+0

我想最好的解决方案取决于你什么时候不想永远重启过程。例如,如果你只是想在你故意“处理”时重新启动脚本。然后你可以指定'--killSignal = SIGTERM'如果你需要更多的自定义的情况,那么你可能需要考虑永久监视器,并用永远监视器编写一个节点脚本,情况下重新启动/不重新启动,然后运行您的节点脚本。 – 2015-03-13 16:20:57

+0

我编辑了我的问题,使其更清晰。我已经尝试过使用'--killSignal = SIGTERM'和'process.exit()',但脚本仍然会重新启动... – Shawn 2015-03-13 16:38:48

相关问题