2011-06-29 21 views
19

Tengo algunas preguntas, posiblemente triviales, con usar para siempre con Node.js. De lo que he leído, siempre se puede usar programáticamente y mantiene una lista con todos los scripts que se usan para siempre. Cuando ese proceso muere, genera automáticamente uno nuevo hasta que se detiene.Usando para siempre con Node.js

Sin embargo, mi pregunta es, ¿cómo hace siempre esto? ¿Agrega estos scripts para iniciarse también en el arranque?

+3

Gracias @ Daan Brackett – cowboybebop

Respuesta

29

Se puede utilizar siempre programáticamente como esto:

Usando una instancia de siempre dentro de un script Node.js:

var forever = require('forever-monitor'); 

    var child = new (forever.Monitor)('your-filename.js', { 
    max: 3, 
    silent: true, 
    options: [] 
    }); 

    child.on('exit', function() { 
    console.log('your-filename.js has exited after 3 restarts'); 
    }); 

    child.start(); 

Usted debe tomar un minuto y leer sobre las opciones disponibles en la excelente documentación para siempre en the README.md

Usted tiene un número de eventos que se pueden escuchar en el siempre así:

  • error [err]: se produce cuando se produce un error
  • inicio [proceso, fvrFile, datos]: aumenta cuando se inicia por primera vez el script de destino.
  • stop [proceso]: se produce cuando el usuario detiene el script de destino
  • save [ruta de acceso, datos]: se genera cuando el monitor de destino guarda la información de pid en el disco.
  • reinicio [siempre]: Raised cada vez que el guión de destino se reinicia
  • de salida [siempre]: Se lanza cuando el guión de destino en realidad sale (permenantly).
  • stdout [data]: Se lanza cuando se reciben datos desde el proceso hijo stdout
  • stderr [data]: Se lanza cuando se reciben datos desde el proceso hijo stderr

Esto se hace uniendo evento oyentes de la secuencia de comandos que está tratando de ejecutar y manejarlos de una manera elegante.

The code está bastante bien documentado si desea ver exactamente cómo lo hace.

También debe leer esto excellent tutorial para saber cómo mantener un proceso en funcionamiento para siempre.

En cuanto a la segunda pregunta: No, no lo agrega para comenzar en el arranque. Para eso, necesitaría agregarlo como upstart job o usar algo como Monit para monitorearlo e iniciarlo. Para eso, debería echar un vistazo al Deploying Node.js with Upstart and Monit. Es un gran tutorial.

+1

La segunda mitad de su respuesta es exactamente lo que estaba buscando. No estaba seguro de si eso era lo que tenía que hacer, así que gracias por la ayuda. – cowboybebop

+0

Me alegro de poder ayudar. Definitivamente leí ese tutorial sobre la implementación del nodo. He utilizado ese método con algunos ajustes con mucho éxito en varios proyectos anteriores. – slickplaid

+0

Ya había encontrado la página para siempre en github, el tutorial de upstart y monit, de hecho leeré ahora. Gracias – cowboybebop

5

Esta es una publicación anterior, pero me encontré con esto en Google: está un poco desactualizada, ya que siempre se ramificó la versión de línea de comandos de la versión de programa. Debe usar forever-monitor en lugar de forever. El código de ejemplo ahora debería ser;

var forever = require('forever-monitor'); 

    var child = new (forever.Monitor)('your-filename.js', { 
    max: 3, 
    silent: true, 
    options: [] 
    }); 

    child.on('exit', function() { 
    console.log('your-filename.js has exited after 3 restarts'); 
    }); 

    child.start(); 

Traté de sugerir una edición a la respuesta original, pero los poderes que la rechazaron.Me imaginé que podría ahorrarles a otros el tiempo que me llevó averiguar por qué el código de ejemplo no funciona :-)

+0

¿Puedes explicarme qué hace el código? porque quiero reiniciar mi script/servidor node.js programáticamente cada vez que el servidor falla o el sitio deja de funcionar. ¿Cómo puedo manejar eso programáticamente para reiniciar automáticamente mi script si se muere? – Faizan

+0

@Faizan Recomiendo usar para siempre desde la línea de comandos en lugar de en el código. Si el servidor se reinicia, puede agregar una entrada '@reboot' en un crontab para volver a encenderlo. También vale la pena echar un vistazo al pm2. –