Если вы еще не решили это ...
Исходя из предоставленной вами информации, я предполагаю, что вы работаете в Windows.
Ваше приложение не может перехватить SIGINT
, отправленное PM2 в Windows.
shutdown
сообщение работает и в Windows, но оно отправляется только командой gracefulReload
.
(обновление)
Это не полные решения, но может быть полезно (надеюсь ...)
sendSignal
командные вызовы process.kill()
в конечном итоге и некоторые из этих сигналов может работать (не пробовал).
Я также нашел метод ниже.Это может корректно завершить процесс без перезапуска , только если опция autorestart
выключена выключена .
И тогда ваши кластеры не будут перезагружаться в случае аварии, поэтому это может не произойти.будь, что ты хочешь, хотя ...
pm2 позволяет отправлять пользовательское сообщение ( ссылка ).
Поместите приведенный ниже код в новый файл:
var pm2 = require('pm2');
var id = process.argv[2];
pm2.connect(() => {
pm2.sendDataToProcessId({
type: 'shutdown',
data:{some: 'data'},
id: id,
topic: 'some topic'
}, (err, res) => {
console.log('message sent');
pm2.disconnect();
if(err) throw err;
})
});
Измените часть, которая прослушивает сообщение shutdown
, как показано ниже:
process.on('message', function(msg){
if(msg == 'shutdown' || msg.type == 'shutdown'){
// code to clean up
}
});
И запустите первый файл с node
с id кластера, который вы хотите отключить, какаргумент.
Причиной дополнительного msg.type == 'shutdown'
в условии является то, что pm2.sendDataToProcessId()
требует, чтобы аргумент был объектом с этими ключами, и не принимает простую shutdown
строку.