En un servidor Debian, instalé Node.js. Entiendo cómo iniciar una aplicación desde masilla con esta línea de comando:
node /srv/www/MyUserAccount/server/server.js
y acceder a él en la dirección 50.51.52.53:8080
(IP y puerto).
Pero tan pronto como cierro la masilla, ya no puedo alcanzar la dirección 50.51.52.53:8080
.
¿Cómo hacer que una aplicación Node.js se ejecute permanentemente?
Como puedes adivinar, soy un principiante con Linux y Node.js.
Respuestas:
Aunque las otras respuestas resuelven el problema del OP, todas son excesivas y no explican por qué él o ella está experimentando este problema.
La clave es esta línea, "Cierro masilla, entonces no puedo alcanzar la dirección"
Cuando haya iniciado sesión en su host remoto en Putty, ha iniciado un proceso de SSH Linux y todos los comandos escritos desde esa sesión de SSH se ejecutarán como elementos secundarios de dicho proceso.
Su problema es que cuando cierra Putty está saliendo de la sesión SSH que mata ese proceso y cualquier proceso secundario activo. Cuando cierra la masilla, inadvertidamente mata su servidor porque lo ejecutó en primer plano . Para evitar este comportamiento, ejecute el servidor en segundo plano agregando & a su comando:
El problema aquí es la falta de conocimiento de Linux y no una pregunta sobre el nodo. Para obtener más información, consulte: http://linuxconfig.org/understanding-foreground-and-background-linux-processes
ACTUALIZAR:
Como otros han mencionado, el servidor de nodo aún puede morir al salir del terminal. Un problema común que he encontrado es que a pesar de que el proceso de nodo se ejecuta en bg, es stdout y stderr todavía apunta a la terminal. Esto significa que si el servidor de nodo escribe en console.log o console.error, recibirá un error de tubería rota y se bloqueará. Esto se puede evitar canalizando la salida de su proceso:
Si el problema persiste, debe buscar cosas como tmux o nohup , que son aún más robustas que las soluciones específicas de nodo, porque pueden usarse para ejecutar todo tipo de procesos (bases de datos, servicios de registro, otros idiomas).
Un error común que podría hacer que el servidor salga es que después de ejecutarlo
nohup node your_path/server.js &
simplemente cierre la terminal de Putty con un simple clic. En suexit
lugar, debe usar el comando, luego su servidor de nodo estará en funcionamiento.fuente
&
el servicio, también se cierra. (Acabo de probar en Debian Jesse)nohup node /srv/www/MyUserAccount/server/server.js &
nohup node myApp.js &
ejecutó la aplicación en el bg pero muere cuando se cerró el término. Aunque no estoy seguro de por qué.exit
comando para salir de la terminal.Puede instalar para siempre usando npm de esta manera:
Y luego inicie su aplicación con:
O como un servicio:
Forever reinicia su aplicación cuando se bloquea o se detiene por algún motivo. Para restringir los reinicios a 5, puede usar:
Para enumerar todos los procesos en ejecución:
Tenga en cuenta el número entero entre paréntesis y úselo de la siguiente manera para detener un proceso:
Reiniciar un proceso en ejecución va:
Si está trabajando en su archivo de aplicación, puede usar el
-w
parámetro para reiniciar automáticamente cada vezserver.js
que cambie su archivo:fuente
forever start <file>
forever server.js
yforever start server.js
? Sé que dice que es "como un servicio", pero ¿qué significa eso?forever server.js
, inicia el servidor. Si presionoCtrl
+C
, se detiene el servicio. Siforever start server.js
escribo, inicia el servicio e incluso si presionoCtrl
+C
permanece abierto. Luego puede hacer los otros comandos mencionados anteriormente para detener / mirar la lista. Eso es lo que experimenté al menos.forever
módulo (v0.15.3) es vulnerable a los ataques de denegación de servicio de expresión regular y no debe usarse: github.com/foreverjs/forever/issues/960Puede usar PM2 , es un administrador de procesos de producción para aplicaciones Node.js con un equilibrador de carga incorporado.
Instalar PM2
Inicia una aplicación
Si usa Express, puede iniciar su aplicación como
Listado de todos los procesos en ejecución:
Enumerará todo el proceso. Luego puede detener / reiniciar su servicio utilizando la ID o el nombre de la aplicación con el siguiente comando.
Para mostrar registros
fuente
Recomiendo buscar algo como Forever para reiniciar Node en el caso de un bloqueo, y manejar el demonio por usted.
fuente
nohup
, el nodo saldrá cuando salga de la sesión ssh si lo ejecuta de esta manera (a menos que esté usando algo como screen para tmux).nohup
. Sería genial si podemos resolver esta confusión. Pero no sé por dónde empezar.nohup
. Ejemplo:nohup node app.js &
Si solo desea ejecutar su aplicación de nodo en la terminal siempre, solo use la pantalla.
Instalar en ubuntu / debian:
Uso:
ctrl + a
y luegoctrl + d
despedirPara volver está de vuelta:
Una pantalla:
screen -r
Si hay más de uno, puede enumerar todas las pantallas con:
screen -ls
Y entonces:
screen -r pid_number
fuente
Simplemente podrías usar esto
Esto mantendrá la aplicación ejecutándose y para cerrarla, tendrá que eliminarla.
Para eso, puede instalar
htop
y luego buscar el nodo y luego matarlofuente
exit
comando). Si el usuario simplemente cierra la ventana, esto puede usar una señal que no seaSIGHUP
para finalizar el proceso y, por lo tanto, el nodo se cerraría de todos modos.killall node
, que matará todos los procesos de nodo, en mi caso solo uno.Forever es un muy buen módulo de NodeJs para hacer exactamente eso.
Instalar
forever
escribiendo en la línea de comandoLuego use el siguiente comando para ejecutar un script node.js
Tú eres bueno para irte. Además puedes correr
para ver todos los scripts en ejecución. Puede terminar cualquier script específico escribiendo
¿Dónde
[pid]
está el ID de proceso del script que obtendrá dellist
comando? Para detener todas las secuencias de comandos, puede escribirfuente
fuente
Instalación
Puedes usar forever para ejecutar scripts continuamente
para detener el servicio
fuente
Aquí hay una solución nueva que he estado usando para mis proyectos personales:
Colocarlo en
/etc/init/node_app_daemon.conf
:Esto también se encargará de reaparecer su aplicación en caso de que falle. Renunciará a los intentos de reactivar su aplicación si se bloquea 3 o más veces en menos de 15 segundos.
fuente
Durante el desarrollo, recomiendo usar nodemon . Reiniciará su servidor cada vez que cambie un archivo. Como otros han señalado, Forever es una opción, pero en producción, todo depende de la plataforma que esté utilizando. Por lo general, querrá utilizar la forma recomendada del sistema operativo para mantener los servicios actualizados (por ejemplo, http://www.freedesktop.org/wiki/Software/systemd/ ).
fuente
nodemon
ejecuta el comando ronco menos que especifique un archivo JS servidor, por lo que estoy usando esto para ejecutar mongo y el nodo para siempre / al mismo tiempoHe encontrado siempre para hacer el trabajo perfectamente bien.
Suponiendo que ya tiene instalado npm, si no, simplemente hágalo
Luego instalar para siempre
Ahora puedes ejecutarlo así
https://codingweb.io/run-nodejs-application-background/
fuente
Primero instala pm2 a nivel mundial
entonces empezar
fuente
Otra forma es crear una unidad del sistema para su aplicación. cree un archivo "XXX.service" en la carpeta "/ etc / systemd / system", similar a esto:
Un beneficio es que la aplicación se ejecutará como un servicio, se reinicia automáticamente si se bloquea.
También puede usar sytemctl para administrarlo:
systemctl start XXX
para iniciar el servicio,systemctl stop XXX
detenerlo esystemctl enable XXX
iniciar automáticamente la aplicación cuando se inicia el sistema.fuente
Espero que esto ayude.
En la línea de comando, instale para siempre:
Crea un archivo de ejemplo:
Puede editar el archivo y obtener resultados directamente en su navegador.
Puede usar filezilla o cualquier editor para editar el archivo. Ejecute este comando para ejecutar el archivo:
fuente
No es necesario instalar ningún otro paquete.
Ejecute este comando
server.js es su archivo de servidor o puede ser api.js
Después de eso, presione " salir " para cerrar la terminal
fuente
Recomiendo usar PM2, que es un administrador de procesos para aplicaciones Node.js. PM2 proporciona una manera fácil de administrar y demonizar aplicaciones (ejecutarlas como un servicio).
consulte este enlace: https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-centos-7
fuente
El paquete forever funcionó para mí, solo una cosa, depende de la igualdad profunda , por lo que si tuvo problemas para instalarlo como:
Tratar:
en lugar.
fuente