侦听beforeExit或SIGTERM以触发Node中的清理

时间:2015-09-08 12:09:28

标签: node.js heroku

我最近在node.js应用程序中添加了一些东西来监听beforeExit事件并运行一个清理回调,它会在退出之前关闭MySQL连接。

但是我也看到过几个帖子提到正在听这个过程的SIGTERM事件。

所以想知道哪个最好用? (特别是在Heroku环境中)

1 个答案:

答案 0 :(得分:2)

当需要停止dyno时,heroku会向它发送一个SIGTERM,表示它需要停止正在进行的任何操作,并自行停止。

10秒后,他们将发送一个SIGKILL,它将强制终止进程(除非它首先自杀),但出现R12错误。

通过node's documentation查看,当节点即将停止时,看起来像执行了beforeExit,因为它不再有任何事情可做了。
如本文档中所述,接收到kill信号时将被执行。

  

' beforeExit'不会因导致显式终止的条件而发出,例如process.exit()或未捕获的异常,并且不应该用作“退出”的替代方法。事件,除非意图安排更多的工作。

所以是的,您应该听取SIGTERM并在收到该流程时停止您的应用正在执行的操作。

请参阅unix终止信号:http://www.gnu.org/software/libc/manual/html_node/Termination-Signals.html