Я пытался перехватить команды выключения в своем приложении node.js, чтобы я мог убрать соединения перед тем, как убить приложение.
В работе мое приложение использует Docker Swarm, и я вижу, что SIGTERM работаетсрабатывает через мои:
process.on('SIGTERM', function() {});
Однако в моей среде разработчиков я использую docker-compose run
и docker-compose down
, которые, похоже, не вызывают мои захваты SIG * (У меня есть локальная версия rabbitMQ, в которой события SIG публикуются и перед выключением).
Я запускаю образ ubuntu: bionic в моем Dockerfile ив моем файле docker-compose у меня есть init: true .Мой движок Docker 18.09.2 и compose: 1.23.2 с версией : "3.7" вверху моего файла compose.
Это все мои события захвата в моем 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();
})