Então, há duas causas que descobri que ambas poderiam causar o comportamento descrito.
-
Piping para um processo de log. No meu script upstart eu tive uma linha dizendo algo como
exec su nodejs node /home/nodejs/server.js | /home/nodejs/logger.js
isto faria o daemon upstart supervisionar o processo de log ao invés do servidor. Assim, um servidor com falha passaria despercebido e pareceria estar parado. (em vez disso, pode-se usar < < < para canalizar da direita para a esquerda) -
process.on('uncaughtException', ...)
pode desativar o aplicativo de nó. Eu acho que um dos módulos que eu tenho usado tinha um modo de depuração que permitia esse evento.