proyecto - ¿Cómo hacer que una aplicación node.js se ejecute permanentemente?
nodejs en produccion (16)
nohup working comprobé en AWS Ubunto vm seguir la
syntax
correcta
ubuntu@ip-172-00-00-00:~/ms$ nohup node server.js &
luego presiona enter veras esta linea
ubuntu@ip-172-00-00-00:~/ms$ nohup: ignoring input and appending output to ‘nohup.out’
entonces escribe esto
rm nohup.out
En un servidor Debian, instalé Node.js. Entiendo cómo lanzar una aplicación desde putty con esta línea de comando:
node /srv/www/MyUserAccount/server/server.js
y 50.51.52.53:8080
a ella 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.
Aquí hay una solución upstart que he estado usando para mis proyectos personales:
Colóquelo en /etc/init/node_app_daemon.conf
:
description "Node.js Daemon"
author "Adam Eberlin"
stop on shutdown
respawn
respawn limit 3 15
script
export APP_HOME="/srv/www/MyUserAccount/server"
cd $APP_HOME
exec sudo -u user /usr/bin/node server.js
end script
Esto también manejará el reaparecimiento de su aplicación en caso de que falle. Abandonará los intentos de reaparecer su aplicación si falla 3 o más veces en menos de 15 segundos.
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, luego 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 hijos de dicho proceso.
Su problema es que cuando cierra Putty está saliendo de la sesión de SSH, que mata ese proceso y cualquier proceso secundario activo. Cuando cierra la masilla, mata inadvertidamente su servidor porque lo ejecutó en primer plano . Para evitar este comportamiento, ejecute el servidor en segundo plano agregando & a su comando:
node /srv/www/MyUserAccount/server/server.js &
El problema aquí es la falta de conocimiento de Linux y no una pregunta sobre el nodo. Para obtener más información, visite: http://linuxconfig.org/understanding-foreground-and-background-linux-processes
ACTUALIZAR:
Como han mencionado otros, el servidor de nodos todavía puede morir al salir del terminal. Un error común que he encontrado es que aunque el proceso del nodo se está ejecutando en bg, es stdout y stderr todavía apunta al 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:
node /srv/www/MyUserAccount/server/server.js > stdout.txt 2> stderr.txt &
Si el problema persiste, debería buscar cosas como tmux o nohup , que son aún más sólidas que las soluciones específicas de nodo, ya que 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 se cierre es que, después de ejecutar el nohup node your_path/server.js &
simplemente cierre el terminal Putty con un simple clic. Debería usar el comando exit
en su lugar, entonces su servidor de nodo estará en funcionamiento.
Durante el desarrollo, recomiendo usar nodemon . Reiniciará su servidor cada vez que cambie un archivo. Como han señalado otros, Forever es una opción, pero en producción, todo depende de la plataforma que esté utilizando. Por lo general, deseará usar la forma recomendada del sistema operativo para mantener los servicios (por ejemplo, http://www.freedesktop.org/wiki/Software/systemd/ ).
Espero que esto ayude.
En la línea de comandos, instale para siempre:
npm install forever -g
Crea un archivo de ejemplo:
sudo nano server.js
Puede editar el archivo y obtener resultados directamente en su navegador.
Puedes usar filezilla o cualquier editor para editar el archivo. Ejecute este comando para ejecutar el archivo:
forever start --minUptime 1 --spinSleepTime 1000 -w server.js
He encontrado para siempre hacer el trabajo perfectamente bien.
Suponiendo que ya tiene npm instalado, si no, simplemente haga
sudo apt-get install npm
Entonces instala para siempre
npm install forever --global
Ahora puedes ejecutarlo así
forever start app.js
Instalación
$ [sudo] npm install forever -g
Puedes usar para siempre para ejecutar scripts continuamente
forever start server.js
forever list
para el servicio de parada
forever stop server.js
Otra forma es crear una unidad de sistema para tu aplicación. cree un "XXX.service" archivo "/ etc / systemd / system" de forma similar a esto:
[Unit]
Description=swagger
After=network.target
[Service]
ExecStart=/usr/bin/http-server /home/swagger/swagger-editor &
WorkingDirectory=/home/swagger
Restart=always
RestartSec=30
[Install]
WantedBy=multi-user.target
Un beneficio es que la aplicación se ejecutará como un servicio, se reiniciará automáticamente si se bloquea.
También puedes usar sytemctl para administrarlo:
systemctl start XXX
para iniciar el servicio, systemctl stop XXX
para detenerlo y systemctl enable XXX
para iniciar automáticamente la aplicación cuando se inicia el sistema.
Podrías instalarlo forever usando npm de esta manera:
sudo npm install -g forever
Y luego comienza tu aplicación con:
forever server.js
O como un servicio:
forever start server.js
Forever reinicia su aplicación cuando se bloquea o se detiene por algún motivo. Para restringir los reinicios a 5 puedes usar:
forever -m5 server.js
Para enumerar todos los procesos en ejecución:
forever list
Anote el número entero entre paréntesis y utilícelo de la siguiente manera para detener un proceso:
forever stop 0
El reinicio de un proceso en ejecución va:
forever restart 0
Si está trabajando en su archivo de aplicación, puede usar el parámetro -w
para reiniciar automáticamente cada vez que server.js
su archivo server.js
:
forever -w server.js
Primero instale pm2 globalmente
npm install -g pm2
entonces empezar
pm2 start bin/www
Puede usar pm2 , es un administrador de procesos de producción para aplicaciones Node.js con un equilibrador de carga incorporado.
Instalar PM2
$ npm install pm2 -g
Iniciar una aplicación
$ pm2 start app.js
Si usas Express entonces puedes iniciar tu aplicación como
pm2 start ./bin/www --name="app"
Listado de todos los procesos en ejecución:
$ pm2 list
Enumera todo el proceso. Luego puede detener / reiniciar su servicio usando ID o Nombre de la aplicación con el siguiente comando.
$ pm2 stop all
$ pm2 stop 0
$ pm2 restart all
Para visualizar los registros
$ pm2 logs [''all''|app_name|app_id]
Recomiendo buscar algo como Forever para reiniciar Node en caso de una falla, y manejar el desmontaje de esto por usted.
Recomiendo usar PM2, que es un administrador de procesos para las 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
Si solo desea ejecutar su aplicación de nodo en el terminal siempre, simplemente use la pantalla.
Instalar en Ubuntu / Debian:
sudo apt-get install screen
Uso:
$ screen
$ node /path/to/app.js
ctrl + a
y luego ctrl + d
para despedir
Para volver está de vuelta:
Una pantalla: screen -r
Si hay más de una, puedes enumerar todas las pantallas con: screen -ls
Y luego: screen -r pid_number
Simplemente podrías usar esto
nohup node /srv/www/MyUserAccount/server/server.js &
Esto mantendrá la aplicación en ejecución y, para cerrarla, tendrás que anularla.
Para eso podrías instalar htop
y luego buscar el nodo y luego matarlo
forever es un muy buen módulo de NodeJs para hacer exactamente eso.
Instalar forever
escribiendo en la línea de comandos
$ npm install forever -g
Luego use el siguiente comando para ejecutar un script node.js
$ forever start /path/to/script.js
Tú eres bueno para irte. Además puedes correr
$ forever list
para ver todos los scripts en ejecución. Puede terminar cualquier script específico escribiendo
$ forever stop [pid]
donde [pid]
es el ID de proceso del script que obtendrá del comando list
. Para detener todos los scripts, puede escribir
$ forever stopall