start run node how example node.js forever nodemon

node.js - run - npm yargs



Forever+Nodemon corriendo juntos (7)

¿Hay alguna forma de tener ambos paquetes funcionando juntos?

Entonces, básicamente, quiero tener lo mejor de ambos mundos. Ejecutando el servidor automáticamente (y reiniciando cuando hay un error) y también actualizaciones automáticas cuando hay un cambio de archivo .js.


Deberías ejecutar algo como esto

forever start -c nodemon app.coffee


Estoy usando forever-service . . .

Esto es lo que funcionó para mí. Hace lo siguiente: cada vez que se modifica un archivo json o raml en la carpeta de aplicaciones dist / assets, espere 10 segundos y luego reinicie la aplicación de nodo (script server.js):

$ forever-service install raml --script server.js -f " -c nodemon" -o " --delay 10 --watch dist/assets -e json,raml --exitcrash" -e "PATH=/usr/local/bin:$PATH"

Entonces puedo ejecutar:

$ service raml start|stop|restart|status

También puedo hacer que el servicio se inicie en el reinicio del servidor con la utilidad chkconfig:

$ chkconfig --add raml $ chkconfig raml on


Hay una entrada al respecto en las nodemon frecuentes de nodemon :

Si está utilizando nodemon forever (quizás en un entorno de producción), puede combinar los dos juntos. De esta forma, si el script se bloquea, siempre se reinicia el script, y si hay cambios de archivo, nodemon reinicia el script. Para más detalles, ver el número 30 .

Para lograr esto, debe agregar lo siguiente en la llamada para forever :

  • Use forever -c nodemon option para decir para siempre que ejecute nodemon lugar de node .
  • Incluya la bandera nodemon --exitcrash para asegurarse de que nodemon finalice si la secuencia de comandos falla (o se cierra inesperadamente).
  • Dile para siempre que use SIGTERM lugar de SIGKILL cuando solicite que nodemon se detenga. Esto garantiza que nodemon puede detener el proceso del nodo observado limpiamente.
  • Opcionalmente agregue el parámetro --uid , agregando un nombre único para su proceso. En el ejemplo, el uid está configurado para foo .

bash forever start --uid foo --killSignal=SIGTERM -c nodemon --exitcrash server.js

Para probar esto, puede matar el proceso server.js y lo reiniciará para siempre. Si touch server.js nodemon, lo reiniciará.

Para detener el proceso controlado por forever y nodemon, simplemente llame al siguiente, utilizando el uid que le asignamos anteriormente ( foo ):

bash forever stop foo

Esto detendrá tanto el nodo como el proceso del nodo que estaba monitoreando.

Tenga en cuenta que no recomendaría el uso de nodemon en un entorno de producción, pero eso se debe a que no me gustaría que se reinicie sin mis instrucciones explícitas.


No he encontrado una forma de que ambos paquetes se ejecuten juntos. Traté de hacer la técnica de @ toxa, pero cuando mi aplicación node.js lanzó una excepción, nodemon no la reiniciaría automáticamente, sino que emitiría un mensaje de error al registro de siempre:

nodemon] app crashed - waiting for file changes before starting...

Sin embargo, siempre tiene una opción -w y el siguiente comando es efectivamente el mismo que si estoy ejecutando nodemon y para siempre:

forever start -w my-app.js

La desventaja de forever -w versus nodemon : forever no tiene una opción de -delay, por lo que mi servidor se reinicia una vez por cada archivo que se cambia.


Prefiero un combo de lo que sugieren Toxa y Jubair.

forever start -c nodemon app.coffee --exitcrash


Si necesita pasar argumentos:

forever start -c "nodemon --harmony" app.js --exitcrash


Toxa estaba en el camino correcto, el problema planteado por cfogelberg es válido, pero para evitar ese problema, puede hacer lo siguiente:

forever -c "nodemon --exitcrash" app.js

esto asegura que realmente sale nodemon (en lugar de darle el mensaje de "colisión de la aplicación") y luego lo recoge de nuevo para siempre.

In forever --help this -c especifica un comando para ejecutar, de lo contrario, predetermina el nodo. Sin -c da como resultado el error que se menciona en los comentarios a esta respuesta.