将运行Node.js脚本作为CRON作业,而不closures数据库连接最终会杀死所有的RAM?

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

那时候,当我写这些脚本的时候,Stack overflow的人告诉我,无论如何都不需要closures连接。 所以我让它成为。

现在我想知道,这些脚本实际上还在运行吗? 因为这些将作为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); 之后的命令,以确保脚本完成时,应该。

在这样的情况下,当你没有一行摘要后,你可以退出,你可以听某个事件,并在它到达时退出。 例如:

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

除了右边的process.exit之外,还可以设置一个超时时间来终止一段时间之后的脚本。 例如:

 setTimeout(process.exit, 20*1000); 

将在20秒后终止脚本。 只要万一数据库或连接出现问题,您就可以添加它,并且永远不会收到“结束”事件,或者等待时间过长。

有时候joinprocess.exit(0); 对于像这样的脚本,可能比closures当时可能打开的所有数据库连接或其他可能会阻止脚本终止的事情更为方便。