我一直试图在我的node.js应用程序中捕获关闭命令,以便可以在杀死该应用程序之前整理连接。
在生产中,我的应用程序使用docker swarm,我可以看到通过以下方式触发了SIGTERM:
process.on('SIGTERM', function() {});
但是,在我的开发环境中,我使用的是
docker-compose run
和docker-compose down
,这似乎并不会触发我的 SIG * 捕获(我运行的是本地版本RabbitMQ,在关闭之前, SIG 事件也会发布)。我正在Dockerfile和docker-compose文件中运行 ubuntu:bionic 镜像,我具有 init:true 。我的Docker引擎为18.09.2,撰写版本为1.23.2,带有版本:撰写文件顶部的“3.7” 。
这些都是我的index.js中的所有捕获事件:
process.on('exit', () => {
reporter.ossEvent('APP STOPPED exit');
shutdown();
});
process.on('SIGINT', () => {
reporter.ossEvent('APP STOPPED SIGINT');
shutdown();
});
process.on('SIGTERM', function() {
reporter.ossEvent('APP STOPPED SIGTERM');
shutdown();
});
process.on('SIGUSR1', () => {
reporter.ossEvent('APP STOPPED SIGUSR2');
shutdown();
});
process.on('SIGUSR2', () => {
reporter.ossEvent('APP STOPPED SIGUSR2');
shutdown();
})
最佳答案
#!/bin/bash
set -e
_kill_procs() {
kill -TERM $node
}
# Relay quit commands to processes
trap _kill_procs SIGTERM SIGINT
dumb-init -- node ./build/index.js $@ &
node=$!
#sleep infinity
echo 'Starting node process now'
wait $node
上面的代码是听SIGTERM和SIGKILL并杀死节点
关于javascript - 在node.js中捕获docker-compose关闭事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55809536/