我们有一个由Upstart管理的node.js / express / socket.io服务器。通过在bash中运行此命令来停止服务器:'stop nodejs',其中nodejs是具有以下内容的Upstart脚本:
Products
我们想在服务器停止之前执行一些清理工作,如上所述。我们已经尝试过process.on('exit'...)和process.on('SIGINT'...),但没有用。
如何在服务器停止之前调用回调?
答案 0 :(得分:1)
在深入研究文档后,upstart会发出SIGTERM
信号以终止该程序:
http://upstart.ubuntu.com/cookbook/#stopping-a-job
因此您使用节点收听此信号: https://nodejs.org/api/process.html#process_signal_events
Windows上不支持SIGTERM,可以监听它。
简短的例子:
// Begin reading from stdin so the process does not exit.
process.stdin.resume();
// listen to the event
process.on('SIGTERM', () => {
console.log('some cleanup here');
});
这应该可以胜任。
此外,您有一个pre-stop
新手入门事件,您可以在关闭服务之前手动关闭节点,以确保正确关闭节点。