永远支持退出信号定制与--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。
我读过这个,但我不知道如何使用它。当我'process.exit()',我可以传入一个整数。我无法通过SIGTERM或SIGKILL。另外,killSignal实际上做了什么?如果我将它设置为SIGTERM,将会停止发生什么样的默认行为?什么新行为出现? – Shawn 2015-03-13 16:10:04
我想最好的解决方案取决于你什么时候不想永远重启过程。例如,如果你只是想在你故意“处理”时重新启动脚本。然后你可以指定'--killSignal = SIGTERM'如果你需要更多的自定义的情况,那么你可能需要考虑永久监视器,并用永远监视器编写一个节点脚本,情况下重新启动/不重新启动,然后运行您的节点脚本。 – 2015-03-13 16:20:57
我编辑了我的问题,使其更清晰。我已经尝试过使用'--killSignal = SIGTERM'和'process.exit()',但脚本仍然会重新启动... – Shawn 2015-03-13 16:38:48