防止 NodeJS 程序退出

prevent NodeJS program from exiting

我正在创建基于 NodeJS 的爬虫,它与 node-cron 包一起工作,我需要防止入口脚本退出,因为应用程序应该 运行 永远作为 cron 并且将在特定时期执行爬虫日志。

在 web 应用中,服务器会监听并防止终止,但在无服务器应用中,它会在所有代码执行完后退出程序,不会等待 crons。

我应该为此编写 while(true) 循环吗? 为此,节点中的最佳实践是什么?

提前致谢!

因为nodejs是单线程的,所以while(true)是行不通的。它只会抓住整个 CPU 而没有其他东西可以 运行.

nodejs 将留在 运行ning 时,当任何东西在未来可能 运行 存在时。这包括打开的 TCP 套接字、侦听服务器、计时器等...

为了更具体地回答,我们需要查看您的代码并了解它是如何使用 node-cron 的,但是您只需添加一个简单的 setInterval() 这样的像这样:

setInterval(function() {
    console.log("timer that keeps nodejs processing running");
}, 1000 * 60 * 60);

但是,node-cron 本身使用计时器,因此看起来如果您正确使用 node-cron 并且您正确地将任务安排到 运行 将来,那么您的 nodejs 进程应该不会停止。所以,我怀疑你真正的问题是你没有用 node-cron 正确地安排未来的任务。只有您向我们展示您使用 node-cron 的实际代码,我们才能帮助您解决这个问题。

您可以从进程的标准输入开始读取:

import process from 'process';

process.stdin.resume();

// do your thing

这将防止进程立即终止。

这是官方文档中的mentioned

但是,这可能会阻止您的进程被正常终止。

基于@jfriend00 的回答我这样做了,所以它是可以杀死的

var running = true;

function killProcess() {
    running = false;
}

process.on('SIGTERM', killProcess);
process.on('SIGINT', killProcess);
process.on('uncaughtException', function(e) {
    console.log('[uncaughtException] app will be terminated: ', e.stack);
    killProcess();
});

function run() {
    setTimeout(function() {
        if (running) run();
    }, 10);
}

run();