我正在构建将作为CRON作业运行的Node.js脚本。 (完整的终端脚本)。这些脚本使用API从周围获取数据,并使用MongoDB(本机驱动程序)。我没有使用db.close()
语句,因为该脚本永远不会自行结束(或者至少看起来就像从终端那样),要完成它,有必要按CTRL + C取消。
当我编写这些脚本时,Stack溢出的人告诉我,无论如何都不需要关闭连接。所以我放手了。
现在我想知道,这些脚本实际上还在运行吗?因为这些将作为CRON作业运行,间隔很小,这是否意味着这些脚本最终将从服务器中删除RAM?这是否意味着,将有数千个脚本在运行并等待MongoClient.connect(mongoUrl, (err, db) => {
if (err) {
console.log(err);
return;
}
var usersCollection = db.collection('users').find();
usersCollection.on('data', (doc) => {
console.log(doc);
});
语句?
示例代码:
{{1}}
答案 0 :(得分:2)
节点脚本仅在没有任何内容侦听事件时自行退出。
使用您的脚本,您可能知道在完成脚本的主要目的后何时不需要执行任何操作。例如,当您的脚本的目的是执行某个代码,打印摘要等时,您可以在该命令之后添加process.exit(0);
以确保脚本在应该完成时完成。
在这种情况下,当您没有一行摘要(之后可以退出)时,您可以侦听某个事件并在它到达时退出。例如:
usersCollection.on('end', process.exit);
除了正确位置的process.exit
之外,您还可以设置超时以在特定时间后终止脚本。例如:
setTimeout(process.exit, 20*1000);
将在20秒后终止脚本。这可以添加,以防万一数据库或连接出错,你永远不会得到'结束'事件,或者等待它需要很长时间。
有时为这样的脚本添加process.exit(0);
可能比关闭当时可能打开的所有数据库连接或可能阻止脚本终止的其他事情更方便。