usando upstart
você poderá parar de usar forever
para o gerenciamento de processos do nó. O upstart possui mecanismos para garantir que seu processo seja iniciado / interrompido / reiniciado no caso de uma falha (ou quase qualquer outro evento)
aqui está uma versão modificada do seu script upstart que usa a diretiva respawn
do upstart para lidar com o reinício do processo se ele falhar:
description "Start the node process with Upstart"
author "you"
# use if your process is going to fork *once*
# expect fork
# use if your process is going to fork *twice*
# exepect daemon
# respawn the process indefinitely
# (ie. disregard the number of times it crashed
# during a given interval and continuously
# restart the process)
respawn
respawn limit unlimited
setuid admin
# ensures the process is only started once we have
# filesystem access and an ethernet interface other
# than loopback is available (ie. internet conn)
# if your node process doesn't require net connectivity
# just remove the 'and net-device-up...'
start on (local-filesystem and net-device-up IFACE!=lo)
stop on shutdown
# chdir sets the directory for all script blocks
# (pre/post/errethang)
chdir "/path/to/your/app"
script
# we're already in /path/to/your/app cause of 'chdir'
echo "app is starting"
/usr/local/bin/node app.js 2>&1 > app.log
end script
pre-stop script
echo "app is about to stop"
end script
finalmente, para ter certeza de que não há erros de sintaxe no seu conf de serviço, você pode usar init-checkconf /etc/init/myapp.conf
.
minha principal fonte de referência para o upstart é aqui . este documento é um pouco pesado, no entanto. e é difícil discernir o uso do mundo real a partir de alguns exemplos.