我的nodejs脚本在执行成功后不会自行退出

我已经写了一个脚本来更新我的数据库表后从数据库表和solr读取数据。 我正在使用asyn.waterfall模块。 问题在于所有操作成功完成后脚本没有退出。 我曾经使用db连接池也认为可能是创build脚本等待无限。 我想把这个脚本放在crontab中,如果它不能正常退出,那么这将会不必要的创build大量的实例。

你必须通过打电话告诉它

 process.exit(); 

更具体地说,你需要在async.waterfall()(该函数的第二个参数)的callback中调用它。 在这一点上,你所有的asynchronous代码已经执行,你的脚本应该准备好退出。

编辑:正如下面@Aaron所指出的,这可能与数据库连接处于活动状态有关,并且不允许节点进程结束。

我刚刚经历了这个问题。

只是使用process.exit()的问题是,我正在处理的程序是创build句柄,但从不销毁它们。

它正在处理一个目录并将数据放入orientdb中。

所以我所学到的一些东西是在删除参考之前需要closures数据库连接。 而process.exit()并不能解决所有的情况。

当我的项目处理了2,000个文件。 它会下降到大约500左右,额外的句柄将填补可用的工作记忆。 这意味着它将无法继续。 所以永远不要到达这个过程,最后退出。

另一方面,如果您closures了要求应用程序保持打开状态的项目,则可以从源头解决问题。

我能够使用的两个“无证函数”是

 process._getActiveHandles(); process._getActiveRequests(); 

我不确定其他function将有助于debugging这些types的问题,但这些都是惊人的。

他们返回一个数组,你可以通过使用这些方法来确定你的进程中发生了什么。

我只希望能帮助其他人在这篇文章中磕磕绊绊。

我们可以使用以下命令退出执行:

 connection.destroy();