我最近在node.js应用程序中添加了一些东西来监听beforeExit
事件并运行一个清理回调,它会在退出之前关闭MySQL连接。
但是我也看到过几个帖子提到正在听这个过程的SIGTERM
事件。
所以想知道哪个最好用? (特别是在Heroku环境中)
答案 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