Основной процесс node.js, уничтоженный сигналом ABRT, но не перехваченный process.on ("SIGABRT", ...) - PullRequest
3 голосов
/ 04 января 2012

Я использую upstart для запуска демона для запуска сервера node.js (с использованием express и connect-redis) http и https сервера (в одном файле .js узла) для

http://kevin.vanzonneveld.net/techblog/article/run_nodejs_as_a_service_on_ubuntu_karmic/

Все нормально при запуске, и все функции приложения работают должным образом, но последовательно, после различной продолжительности (иногда через несколько часов, иногда через день), процесс демона уничтожается и единственный журнал, который у меня естьего можно найти в

daemon.log:

myserver init: основной процесс myupstartscript (3410), прерванный сигналом ABRT

в моем узле jsфайл, который я поместил:

process.on('uncaughtException',...);
process.on('SIGABRT', .... );
process.on('ABRT',...);

ни один из них не уловил событие.

Я не знаю, как смоделировать событие.Когда я попытался использовать

kill -SIGABRT [the pid]
kill -ABRT [the pid]

, мой process.on ('SIGABRT', ..) перехватывает их.

Другие вещи, которые я заметил:

  • Если я запускаю службу БЕЗ сервера https, сбой никогда не происходит.
  • На основании других моих журналовсбой НЕ является результатом события, инициируемого пользователем
  • Ни одна из других специфичных для приложения служб, на которые я полагаюсь (redis-server, mongod), по-видимому, не связана с событием, они продолжают обслуживание в обычном режиме.
  • Я установил сценарий upstart на респаун после аварийного сбоя, и он делает это.

Любая помощь в том, как я могу отследить его?

Моя настройка: Linux iLV12.6.35.4-rscloud # 8 SMP Mon 20.09 15:54:33 UTC 2010 x86_64 Узел GNU / Linux v0.5.11-pre

Спасибо.

1 Ответ

1 голос
/ 04 января 2012

Если вы хотите поймать узел при выходе, используйте

process.on('exit', function () {
  console.log('About to exit.');
});
...