运行 Node.js 脚本作为 CRON 作业而不关闭数据库连接最终会杀死所有 RAM 吗?

Will running Node.js scripts as CRON jobs without closing database connection eventually kill all the RAM?

我正在构建 Node.js 个脚本,这些脚本将 运行 作为 CRON 作业。 (完整的终端脚本)。这些脚本使用 API 和 MongoDB(本机驱动程序)从周围获取数据。我没有使用 db.close() 语句,因为该脚本永远不会自行结束(或者至少从终端看起来是这样),要完成它,有必要按 CTRL+C取消。

当时我写这些脚本的时候,Stack overflow 的人告诉我,无论如何都不需要关闭连接。所以我顺其自然。

现在我想知道,这些脚本实际上还是运行吗?由于这些 运行 作为 CRON 作业,间隔很小,这是否意味着这些脚本最终会从服务器中删除 RAM?这是否意味着将有数千个脚本 运行 并等待 db.close() 语句?

示例代码:

MongoClient.connect(mongoUrl, (err, db) => {
  if (err) {
    console.log(err);
    return;
  }

  var usersCollection = db.collection('users').find();

  usersCollection.on('data', (doc) => {

    console.log(doc);

  });

节点脚本仅在不再监听事件时自行退出。

使用您的脚本,您可能知道在实现脚本的主要目的后什么时候不需要做任何事情。例如,当您的脚本的目的是执行特定代码、打印摘要等时,您可以在该命令后添加 process.exit(0); 以确保脚本按时完成。

像这种情况,当你没有一行summary之后可以退出时,你可以监听某个事件,当它到达时退出。例如:

usersCollection.on('end', process.exit);

除了在正确的地方process.exit,您还可以设置超时以在特定时间后终止脚本。例如:

setTimeout(process.exit, 20*1000);

将在 20 秒后终止脚本。可以添加它以防万一数据库或连接出现问题并且您永远不会收到 'end' 事件,或者等待它的时间太长。

有时为这样的脚本添加 process.exit(0); 可能比关闭当时可能打开的所有数据库连接或其他可能阻止脚本终止的事情更方便。