A continuación, veamos si Forever puede lograr el objetivo.
1. Introducción para siempre
Forever es un simple demonio imperativo NodeJS que puede comenzar, detener y reiniciar aplicaciones de aplicaciones. Forever está completamente basado en las operaciones de la línea de comandos. Bajo el proceso para siempre, se crea un proceso de niño de nodo y el proceso del niño nodo se monitorea a través del monitor. Una vez que el archivo se actualiza o el proceso se vuelve a caducar, Forever reiniciará automáticamente el servidor de nodo para garantizar que la aplicación se esté ejecutando normalmente.
2. Instalación para siempre
Instalación global para siempre
La copia del código es la siguiente:
~ D:/Workspace/JavaScript> NPM Install -g Forever
D:/toolkit/nodejs/para siempre -> d:/toolkit/nodejs/node_modules/para siempre/bin/para siempre
D:/toolkit/nodejs/foreverd -> d:/toolkit/nodejs/node_modules/forever/bin/foreverd
Echa un vistazo a la ayuda para siempre
La copia del código es la siguiente:
~ D:/Workspace/JavaScript> Forever -H
Ayuda: uso: para siempre [acción] [opciones] script [script-options]
ayuda:
Ayuda: monitorea el script especificado en el proceso actual o como un demonio
ayuda:
Ayuda: Acciones:
AYUDA: Inicie Start Script como Daemon
AYUDA: Detente detener el guión de demonio
Ayuda: Stopall Stop All Running Forever Scripts
Ayuda: reiniciar el script de demonio
Ayuda: reiniciar en reiniciar todos los scripts para siempre
AYUDA: Lista de listas Todos los scripts de Forever Forever
Ayuda: config enumera todo para siempre la configuración del usuario
Ayuda: Establecer <Key> <Sal> Establece la configuración de Forever Specified <Key>
AYUDA: Clear <Key> Borre la configuración de siempre especificada <pate>
Ayuda: los registros enumeran los archivos de registro para todos los procesos para siempre
Ayuda: registros <script | índice> cola los registros para <script | índice>
Ayuda: las columnas ADD <OL> agrega la columna especificada a la salida en 'Forever List'
Ayuda: las columnas RM <COL> eliminaron la columna especificada de la salida en 'Forever List'
Ayuda: columnas establecidas <cols> Establezca todas las columnas para la salida en 'Forever List'
Ayuda: CleanLogs [CUIDAD] elimina todos los archivos de registro históricos para siempre
ayuda:
Ayuda: Opciones:
Ayuda: -M Max solo ejecuta el script script max times
Ayuda: -L logfile registra la salida para siempre a logfile
AYUDA: -O Outfile Logs Stdout from Child Script to Outfile
Ayuda: -e Errfile registra stderr del script infantil a errfile
AYUDA: -P Ruta de ruta Base para todos los archivos relacionados para siempre (archivos PID, etc.)
Help: -c comando comando para ejecutar (predeterminado es nodo)
Ayuda: -a, -append anexos registros
Ayuda: -f, -fifo transmisión de transmisión a stdout
Ayuda: -n, -número de líneas de registro para imprimir
Ayuda: - -PidFile el archivo PID
AYUDA: --SourCedir El directorio de origen para el que el script es relativo a
Ayuda: -tiempo de actividad mínimo (milis) de minupeo para que un script no se considere "hilado"
AYUDA: -Spinsleeptime Time to Wait (Millis) entre lanzamientos de un guión giratorio.
Ayuda:-Colors-No-Colors deshabilitará el color de la salida
Ayuda:-Alias de Plain de-No-Colors
Ayuda: -d, - -debug fuerzas para siempre a registrar la salida de depuración
AYUDA: -V, -VERBOSE enciende los mensajes detallados de Forever
Ayuda: -S, -Silent Ejecutar el guión infantil silenciando Stdout y Stderr
Ayuda: -W, -Watch Observe los cambios de archivo
AYUDA:-Directorio de nivel superior-WatchDirectorio para ver desde
Ayuda: - -Watchignore para ignorar el patrón cuando el reloj está habilitado (se permite múltiples opciones)
Ayuda: -h, --help lo estás mirando
ayuda:
Ayuda: [Proceso de ejecución de larga duración]
AYUDA: El proceso para siempre continuará ejecutando mensajes de registro a la consola.
AYUDA: Ej. forever -o out.log -e err.log my -script.js
ayuda:
Ayuda: [Daemon]
AYUDA: El proceso para siempre se ejecutará como un demonio que hará que el proceso de destino comience
Ayuda: en el fondo. Esto es extremadamente útil para scripts de nodo.js de inicio de nodo. JS
Ayuda: sin usar Nohup. Se recomienda ejecutar comenzar con -o -l, & -e.
AYUDA: Ej. Forever Start -l Forever.log -o out.log -e Err.log my -daemon.js
AYUDA: Forever Stop my-daemon.js
ayuda:
Vemos que siempre admite muchos elementos de comando y configuración, que deberían ser una herramienta de administración de línea de comandos.
3. Explicación china de la línea de comandos para siempre
Acciones del subcomando:
La copia del código es la siguiente:
Inicio: inicie el proceso de demonio
Detener: Detente el demonio
Stopall: Detener todos los procesos para siempre
Reiniciar: reinicie el demonio
reiniciar: reiniciar todos los procesos
Lista: la lista muestra el proceso para siempre
config: enumere todos los elementos de configuración de usuario
Establezca <Key> <Val>: Establecer elementos de configuración de usuario
Borrar <play>: borrar elementos de configuración de usuario
Registros: enumera registros para todos los procesos para siempre
registros <script | índice>: mostrar el último registro
columnas Agregar <COL>: Métricas personalizadas a la lista para siempre
Columnas RM <OL>: elimine la métrica de la lista para siempre
columnas establecidas <Ols>: Establezca todas las métricas en la lista para siempre
CleanLogs: Eliminar todos los registros de historia para siempre
Opciones de parámetros de configuración:
La copia del código es la siguiente:
-M max: número de veces el script especificado se ejecuta
-L logFile: REGISTRO DE OFERTA EN LOGFILE
-O OUTFILE: Información de la consola de salida para emitir
-e Errfile: Error de consola de salida en ERRFILE
-P ruta: directorio raíz
-c comando: ejecutar el comando, el valor predeterminado es nodo
-a, agregar: fusionar registros
-F, FIFO: salida de registro de transmisión
-n, número: número de líneas de impresión de registro
PIDFILE: archivo PID
SourDir: directorio de código fuente
Minuptime: Tiempo de actualización mínimo de Spinn (MS)
Spinsleeptime: el intervalo entre dos giros
Colores: coloración de salida de consola
Plain: alias sin colores, salida de consola incolora
-d, depuración: modo de depuración
-v, detallado: imprimir salida detallada
-s, silencioso: no imprima registros y mensajes de error
-W, ver: monitorear los cambios de archivo
WatchDirectory: monitorear el directorio superior
Watchignore: Ignorar el monitoreo a través de la coincidencia de patrones
-h, ayuda: información de ayuda de línea de comando
4. Gestión de servidores para siempre
Cree un proyecto web (Express3+EJS) y use para siempre para administrar el servidor.
Instalar express3
La copia del código es la siguiente:
~ D:/Workspace/JavaScript> Express -e NodeJS -Forever
~ D:/workspace/javaScript> CD nodejs-forever && npm install
Inicie la aplicación a través de Forever
La copia del código es la siguiente:
~ D:/Workspace/JavaScript/NodeJS-Forever> Forever Start App.js
ADVERTENCIA: -Minuptime no establecido. En valoración predeterminada a: 1000 ms
Warn: - -spinsleeptime no establecido. Su script saldrá si no permanece despierto durante al menos 1000 ms
Información: archivo de procesamiento para siempre: app.js
Abra el navegador: http: // localhost: 3000, puede ver la interfaz web
Verifique el estado para siempre en ganar
La copia del código es la siguiente:
~ D:/Workspace/JavaScript/NodeJS-Forever> Lista para siempre
Información: No se ejecutan procesos para siempre
~ D:/Workspace/JavaScript/NodeJS-Forever> Forever Stop App.js
Error: para siempre no puedo encontrar el proceso con índice: app.js
¡Encontramos que el programa Forever funcionaba mal! ! El programa está claramente en su estado en ejecución, pero no se puede ver a través de la lista. A continuación, cambie a Linux Ubuntu y continúe probando.
5. Forever Manague los servidores en Ubuntu
Entorno del sistema Linux
Linux: Ubuntu 12.04.2 Servidor de 64 bits
Nodo: V0.11.2
NPM: 1.2.21
Proyecto de inicialización: el comando de instalación no se explica
La copia del código es la siguiente:
~ CD/Home/Conan/NodeJS
~ express -e nodejs -forever
~ cd nodejs-forever && npm install
~ sudo npm install para siempre -g
Empezar para siempre
Copie el código de la siguiente manera: ~ Forever Start App.js
ADVERTENCIA: -Minuptime no establecido. En valoración predeterminada a: 1000 ms
Warn: - -spinsleeptime no establecido. Su script saldrá si no permanece despierto durante al menos 1000 ms
Información: archivo de procesamiento para siempre: app.js
Verifique el estado del servidor de nodo
Copie el código de la siguiente manera: ~ Lista para siempre
Información: procesos para siempre en ejecución
Datos: Script de comando UID Forever PID Logfile tiempo de actividad
Datos: [0] l2ty/usr/local/bin/node app.js 18276 18279 /home/conan/.forever/l2ty.log 0: 0: 0: 37.792
# Proceso del sistema
~ PS -aux | nodo Grep
Advertencia: mala sintaxis de PS, tal vez un falso '-'? Ver http://procps.sf.net/faq.html
Conan 18296 0.5 1.1 597696 23776? SSL 15:48 0:00/usr/local/bin/node/usr/local/lib/node_modules/forever/bin/monitor app.js
Conan 18299 0.4 0.8 630340 18392? SL 15:48 0:00/usr/local/bin/node /home/conan/nodejs/nodejs-forever/app.js
# Ocupación portuaria
~ netstat -nltp | GREP nodo
TCP 0 0 0.0.0.0:3000 0.0.0.0:* Escucha 18299/nodo
Detener el servidor
Copie el código de la siguiente manera: ~ Forever Stop App.js
Información: proceso de detención para siempre:
Datos: Script de comando UID Forever PID Logfile tiempo de actividad
[0] l2ty/usr/local/bin/node app.js 18276 18279 /home/conan/.forever/l2ty.log 0: 0: 0: 45.621
Vemos que es normal en el entorno de Linux Ubuntu.
6. Simular el tiempo de inactividad del servidor
Dos soluciones de prueba:
1. Use comandos de Linux para matar directamente el proceso del nodo
2. En la aplicación, simule la salida de excepción
1). Use comandos de Linux para matar directamente el proceso de nodo
La copia del código es la siguiente:
# Verifique el proceso del nodo, PID = 18299
~ PS -aux | nodo Grep
Conan 18296 0.0 1.1 597696 23776? SSL 15:48 0:00/usr/local/bin/node/usr/local/lib/node_modules/forever/bin/monitor app.js
Conan 18299 0.0 0.8 630340 18392? SL 15:48 0:00/usr/local/bin/node /home/conan/nodejs/nodejs-forever/app.js
Conan 18315 0.0 0.0 13584 956 pts/5 R+ 15:52 0:00 Grep -Color = Nodo automático
# Kill Pid = 19299
~ Kill -9 18299
# Mire nuevamente el proceso del nodo, el nodo se reiniciará automáticamente, el nuevo PID = 18324
~ PS -aux | nodo Grep
Conan 18296 0.0 1.1 597696 23916? SSL 15:48 0:00/usr/local/bin/node/usr/local/lib/node_modules/forever/bin/monitor app.js
Conan 18316 2.6 0.8 630340 18412? SL 15:52 0:00/usr/local/bin/node /home/conan/nodejs/nodejs-forever/app.js
Conan 18324 0.0 0.0 13584 956 pts/5 R+ 15:52 0:00 Grep -Color = Nodo automático
Vemos que matar el proceso del nodo, Forever nos ayudará a reiniciar el nodo.
Monitor para siempre
La copia del código es la siguiente:
~ Kill -9 18296
~ PS -aux | nodo Grep
Conan 18316 0.0 0.9 630340 18644? SL 15:52 0:00/usr/local/bin/node /home/conan/nodejs/nodejs-forever/app.js
Conan 18333 0.0 0.0 13584 952 pts/5 S+ 15:57 0:00 Grep -Color = Nodo automático
# Mata el proceso del nodo nuevamente
~ Kill -9 18316
~ PS -aux | nodo Grep
Conan 18336 0.0 0.0 13584 956 pts/5 S+ 15:58 0:00 Grep -Color = Nodo automático
Intentamos matar el monitor de Forever. El programa de monitor no se reinició automáticamente. Después de matar el proceso del nodo, el nodo no se reiniciará automáticamente.
2). En la aplicación, simule la salida de excepción
Modificar el archivo: App.js
La copia del código es la siguiente:
~ vi App.js
// ..
http.createServer (app) .listen (app.get ('puerto'), function () {
console.log (nueva fecha ());
console.log ('Express Server Listening on Port' + App.get ('Port'));
});
setTimeOut (function () {
console.log (nueva fecha ());
arrojar un nuevo error ('La aplicación es un error desde el interior!');
}, 10*1000);
Comience con el comando nodo
Copie el código de la siguiente manera: ~ nodo App.js
Jue 26 de septiembre de 2013 16:08:44 GMT+0800 (CST)
Servidor expreso escuchando en el puerto 3000
Jue 26 de septiembre de 2013 16:08:54 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
arrojar un nuevo error ('La aplicación es un error desde el interior!');
^
Error: la aplicación es un error desde el interior!
en null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
en Timer.ListonTimeOut [como en Timeout] (Timers.js: 110: 15)
Después de 10 segundos, el proceso de nodo cuelga debido a un error interno.
Empiece con el comando para siempre
La copia del código es la siguiente:
~ registros de mkdir
~ chmod 777 -r registros
~ para siempre -p. -l ./logs/access.log -e ./logs/error.log iniciar app.js
# Verifique el registro de errores
~ registros de gatos/acceso. LOG LS
Jue 26 de septiembre de 2013 16:15:02 GMT+0800 (CST)
Servidor expreso escuchando en el puerto 3000
Jue 26 de septiembre de 2013 16:15:12 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
arrojar un nuevo error ('La aplicación es un error desde el interior!');
^
Error: la aplicación es un error desde el interior!
en null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
en Timer.ListonTimeOut [como en Timeout] (Timers.js: 110: 15)
Error: Script detectado para siempre salió con código: 8
Error: Script para siempre reiniciar por 1 tiempo
Jue 26 de septiembre de 2013 16:15:13 GMT+0800 (CST)
Servidor expreso escuchando en el puerto 3000
Jue 26 de septiembre de 2013 16:15:23 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
arrojar un nuevo error ('La aplicación es un error desde el interior!');
^
Error: la aplicación es un error desde el interior!
en null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
en Timer.ListonTimeOut [como en Timeout] (Timers.js: 110: 15)
Error: Script detectado para siempre salió con código: 8
Error: Script para siempre reiniciar por 2 veces
Jue 26 de septiembre de 2013 16:15:23 GMT+0800 (CST)
Servidor expreso escuchando en el puerto 3000
Jue 26 de septiembre de 2013 16:15:33 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
arrojar un nuevo error ('La aplicación es un error desde el interior!');
^
Error: la aplicación es un error desde el interior!
en null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
en Timer.ListonTimeOut [como en Timeout] (Timers.js: 110: 15)
Error: Script detectado para siempre salió con código: 8
Error: Script para siempre reiniciar por 3 veces
Jue 26 de septiembre de 2013 16:15:33 GMT+0800 (CST)
Servidor expreso escuchando en el puerto 3000
Jue 26 de septiembre de 2013 16:15:43 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
arrojar un nuevo error ('La aplicación es un error desde el interior!');
^
Error: la aplicación es un error desde el interior!
en null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
en Timer.ListonTimeOut [como en Timeout] (Timers.js: 110: 15)
Error: Script detectado para siempre salió con código: 8
Error: Script para siempre reiniciar por 4 veces
¡Encontramos que cada 10 segundos, el nodo cuelga y luego se reinicia para siempre! !
A través de la lista, también podemos ver que el PID ha cambiado varias veces.
La copia del código es la siguiente:
~ Lista para siempre
Información: procesos para siempre en ejecución
Datos: Script de comando UID Forever PID Logfile tiempo de actividad
Datos: [0] SMTT/usr/local/bin/node app.js 18444 18579 Logs/Access.log 0: 0: 0: 7.211
~ Lista para siempre
Información: procesos para siempre en ejecución
Datos: Script de comando UID Forever PID Logfile tiempo de actividad
Datos: [0] SMTT/usr/local/bin/node app.js 18444 18579 Logs/Access.log 0: 0: 0: 8.921
~ Lista para siempre
Información: procesos para siempre en ejecución
Datos: Script de comando UID Forever PID Logfile tiempo de actividad
Datos: [0] SMTT/usr/local/bin/node app.js 18444 18604 Logs/Access.log 0: 0: 0: 0.177
~ Lista para siempre
Información: procesos para siempre en ejecución
Datos: Script de comando UID Forever PID Logfile tiempo de actividad
Datos: [0] SMTT/usr/local/bin/node app.js 18444 18604 Logs/Access.log 0: 0: 0: 2.206
De esta manera, Forever nos ayuda a completar varias funciones importantes de administración de servidores: "Comando simple de inicio/parada", "Apoyo de implementación de caliente", "Descargar reinicio" e "Interfaz de monitoreo y registros".
En comparación con la administración de Upstart, se omiten los pasos para configurar scripts (/etc/init/nodejs-xx.conf). Se deben usar otras funciones un paso más cerca de saber.
7. Configuración de inicio del entorno de desarrollo y entorno de producción
Entorno de desarrollo
La copia del código es la siguiente:
~ CD/Home/Conan/NodeJS/NodeJS-Forever/
~ para siempre -p. -l ./logs/access.log -e ./logs/error.log -a -w iniciar app.js
Entorno de producción
Copie el código de la siguiente manera: ~ Exportar log =/var/log/nodejs/proyecto
~ Exportar PID =/var/log/nodejs/proyecto/forever.pid
~ Exportar app_path =/home/conan/nodejs/nodejs-forever
~ Exportar App = $ App_Path/App.js
~ para siempre -p $ app_path -l $ log/access.log -e $ log/error.log -o $ log/out.log -a -pidfile $ pid start $ app