【问题标题】:Capturing docker-compose shutdown events in node.js在 node.js 中捕获 docker-compose 关闭事件
【发布时间】:2019-09-12 12:57:21
【问题描述】:

我一直在尝试在我的 node.js 应用程序中捕获关闭命令,以便在终止应用程序之前整理连接。

在生产中,我的应用程序使用 docker swarm,我可以看到 SIGTERM 通过我的:

process.on('SIGTERM', function() {});

但是,在我的开发环境中,我使用的是 docker-compose rundocker-compose down,这似乎不会触发我的 SIG* 捕获(我有一个本地版本的 rabbitMQ 正在运行, SIG 事件也会在关闭前发布)。

我在我的 Dockerfile 中运行 ubuntu:bionic 映像,在我的 docker-compose 文件中我有 init: true。我的 Docker 引擎是 18.09.2,compose 是 1.23.2version: "3.7" 在我的 compose 文件的顶部。 p>

这些都是我在 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();
})

【问题讨论】:

标签: javascript node.js docker docker-compose


【解决方案1】:
#!/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 AND SIGKILL并杀死节点

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 2010-11-25
    • 2015-07-29
    • 2021-08-02
    • 2018-09-02
    相关资源
    最近更新 更多