gpt4 book ai didi

node.js - 在某些情况下,我可以永远阻止重新启动我的 Node 脚本吗?

转载 作者:搜寻专家 更新时间:2023-10-31 23:54:15 25 4
gpt4 key购买 nike

我有一个 Node 脚本,我从命令行永远运行它:forever index.js

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

有什么办法吗?

我原本以为我可以用 process.exit(1) 重新启动进程,而不是用 process.exit(0) 重新启动,但显然这不是案例。

另一种表达方式:

  • 填写下面代码中的空白。
  • 将结果保存为index.js
  • 使用 forever index.js 启动脚本
  • 脚本应该打印“hello”,退出,而不是重新启动

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

顺便说一下,那里的延迟只是围绕默认的 --minUpTime 1 秒

最佳答案

forever 支持使用 --killSignal 选项自定义退出信号:

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

以上是为了指示永久停止脚本的kill信号已经开始。要根据脚本退出的方式有选择地永远停止运行脚本,您需要使用 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);

然后,我们需要一个额外的带有 forever-monitor 的脚本(我们称之为 script-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();

现在你可以通过运行 script.js 来运行:node script-monitor.js

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

关于node.js - 在某些情况下,我可以永远阻止重新启动我的 Node 脚本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29032050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com