Esta es una vieja pregunta, pero ocupa un lugar destacado en Google. Casi no puedo creer en las respuestas más votadas, porque ejecutar un proceso node.js dentro de una sesión de pantalla, con &
o incluso con la nohup
bandera, todas ellas, son solo soluciones.
Especialmente la solución screen / tmux, que realmente debería considerarse una solución amateur . Screen y Tmux no están diseñados para mantener los procesos en ejecución, sino para multiplexar sesiones de terminal. Está bien, cuando está ejecutando un script en su servidor y desea desconectarse. Pero para un servidor node.js no desea que su proceso se adjunte a una sesión de terminal. Esto es muy frágil. ¡Para mantener las cosas en funcionamiento, debe demonizar el proceso!
Hay muchas buenas herramientas para hacer eso.
PM2 : http://pm2.keymetrics.io/
# basic usage
$ npm install pm2 -g
$ pm2 start server.js
# you can even define how many processes you want in cluster mode:
$ pm2 start server.js -i 4
# you can start various processes, with complex startup settings
# using an ecosystem.json file (with env variables, custom args, etc):
$ pm2 start ecosystem.json
Una gran ventaja que veo a favor de PM2 es que puede generar el script de inicio del sistema para que el proceso persista entre reinicios:
$ pm2 startup [platform]
Donde platform
puede haber ubuntu|centos|redhat|gentoo|systemd|darwin|amazon
.
forever.js : https://github.com/foreverjs/forever
# basic usage
$ npm install forever -g
$ forever start app.js
# you can run from a json configuration as well, for
# more complex environments or multi-apps
$ forever start development.json
Guiones de inicio :
No voy a entrar en detalles sobre cómo escribir un guión de inicio, porque no soy un experto en este tema y sería demasiado largo para esta respuesta, pero básicamente son simples guiones de shell, activados por eventos del sistema operativo. Puedes leer más sobre esto aquí
Docker :
Simplemente ejecute su servidor en un contenedor Docker con -d
opción y, ¡ voilá , tiene un servidor demonizado node.js!
Aquí hay un Dockerfile de muestra (de la guía oficial de node.js ):
FROM node:argon
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install
# Bundle app source
COPY . /usr/src/app
EXPOSE 8080
CMD [ "npm", "start" ]
Luego construye tu imagen y ejecuta tu contenedor:
$ docker build -t <your username>/node-web-app .
$ docker run -p 49160:8080 -d <your username>/node-web-app
Espero que esto ayude a alguien a aterrizar en esta página. Utilice siempre la herramienta adecuada para el trabajo. ¡Le ahorrará muchos dolores de cabeza y más horas!
exit
. Cuando acabo de cerrar la ventana Putty falla.