Me conecto al servidor Linux a través de masilla SSH. Traté de ejecutarlo como un proceso en segundo plano como este:
$ node server.js &
Sin embargo, después de 2.5 horas, el terminal se vuelve inactivo y el proceso muere. ¿Hay alguna forma de mantener vivo el proceso incluso con el terminal desconectado?
Editar 1
En realidad, lo intenté nohup
, pero tan pronto como cierro el terminal Putty SSH o desconecto mi internet, el proceso del servidor se detiene de inmediato.
¿Hay algo que tenga que hacer en Putty?
Edición 2 (en febrero de 2012)
Hay un node.js
módulo, para siempre . Ejecutará el servidor node.js como servicio daemon.
node.js
linux
background-process
murvinlai
fuente
fuente
exit
. Cuando acabo de cerrar la ventana Putty falla.Respuestas:
Solución simple (si no está interesado en volver al proceso, solo quiere que siga ejecutándose):
También existe el
jobs
comando para ver una lista indexada de esos procesos en segundo plano. Y puede eliminar un proceso en segundo plano ejecutandokill %1
okill %2
con el número como índice del proceso.Solución poderosa (le permite volver a conectarse al proceso si es interactivo):
Luego puede separar presionando Ctrl + a + dy luego volver a conectar ejecutando
screen -r
Considere también la alternativa más nueva a la pantalla, tmux.
fuente
sudo bash
.nohup node server.js > /dev/null 2>&1 &
nohup
significa: No finalice este proceso incluso cuando el stty esté cortado.> /dev/null
significa: stdout va a / dev / null (que es un dispositivo ficticio que no registra ninguna salida).2>&1
significa: stderr también va al stdout (que ya está redirigido a/dev/null
). Puede reemplazar & 1 con una ruta de archivo para mantener un registro de errores, por ejemplo:2>/tmp/myLog
&
al final significa: ejecutar este comando como una tarea en segundo plano.fuente
/dev/null
? Buen registro ... Buena suerte tratando de depurar esto ...Realmente deberías intentar usarlo
screen
. Es un poco más complicado que solo hacerlonohup long_running &
, pero entender la pantalla una vez que nunca vuelves.Comience su sesión de pantalla al principio:
Ejecuta lo que quieras:
Presione ctrl + A y luego d. Hecho. Tu sesión continúa en segundo plano.
Puede enumerar todas las sesiones
screen -ls
y adjuntarlas a algunas porscreen -r 20673.pts-0.srv
comando, donde 0673.pts-0.srv es una lista de entradas.fuente
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 lanohup
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/
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:
Donde
platform
puede haberubuntu|centos|redhat|gentoo|systemd|darwin|amazon
.forever.js : https://github.com/foreverjs/forever
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 ):
Luego construye tu imagen y ejecuta tu contenedor:
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!
fuente
tail -f
al ingresar el archivo de registro que genera pm2.screen
solución que muchas personas están encontrando para el trabajo es una solución alternativa. Hay muchas formas de lograr una tarea específica. Creo que sucede que (considere la pregunta específica) está logrando la tarea específica derun as background and never die
excelente para muchos. También tiene la ventaja adicional de permitir que el usuario regrese a él para volver a interactuar y realizar cambios si lo desea. La clave es componentes esbackground
ynever die
. Todas las soluciones tienen ciertas bonificaciones.nohup
es la solución. Está integrado en Linux, y es para lo que está allí. Es una línea, está limpia y funciona según lo previsto, siempre, independientemente de las actualizaciones. Las personas realmente deberían tratar de evitar el uso de herramientas de terceros para casos de uso básicos como este. El ejemplo de Docker (por ejemplo) es mucho más detallado y requiere más recursos que el comando simple en la respuesta más votada. Amo a Docker, pero no por esto.nohup
solución no satisface el requisito de "nunca morir". A menos que escriba untrap
bucle infinito muy complicado o hacky, no veo cómo mantener el proceso demonizado sin usar herramientas especialmente escritas para este propósito (o un script de inicio escrito por usted mismo, por supuesto).otra solución desconoce el trabajo
fuente
nohup
permitirá que el programa continúe incluso después de que la terminal muera. En realidad, he tenido situaciones en las quenohup
impide que la sesión SSH finalice correctamente, por lo que también debe redirigir la entrada:Dependiendo de cómo
nohup
esté configurado, es posible que también deba redirigir la salida estándar y el error estándar a los archivos.fuente
Tengo esta función en mi archivo rc de shell, según la respuesta de @ Yoichi:
Puedes usarlo de esta manera:
fuente
Nohup y la pantalla ofrecen excelentes soluciones ligeras para ejecutar Node.js en segundo plano. El administrador de procesos Node.js ( PM2 ) es una herramienta útil para la implementación. Instálelo con npm globalmente en su sistema:
npm install pm2 -g
ejecutar una aplicación Node.js como demonio:
pm2 start app.js
Opcionalmente, puede vincularlo a Keymetrics.io, un SAAS de monitoreo realizado por Unitech.
fuente
Eliminará el comando de la lista de tareas activas y lo enviará a segundo plano.
fuente
¿Has leído sobre el comando nohup ?
fuente
Para ejecutar el comando como un servicio del sistema en debian con sysv init:
Copie el script de esqueleto y adáptelo a sus necesidades, probablemente todo lo que tiene que hacer es establecer algunas variables. Su script heredará valores predeterminados finos
/lib/init/init-d-script
, si algo no se ajusta a sus necesidades, anúlelo en su script. Si algo sale mal, puede ver los detalles en la fuente/lib/init/init-d-script
. Los vars obligatorios sonDAEMON
yNAME
. El script se usarástart-stop-daemon
para ejecutar su comando, en elSTART_ARGS
que puede definir parámetros adicionalesstart-stop-daemon
para usar.Así es como ejecuto algunas cosas de Python para mi wiki de wikimedia:
Además de configurar vars, tuve que anular
do_stop_cmd
debido a que Python sustituye al ejecutable, por lo que el servicio no se detuvo correctamente.fuente
Además de las soluciones interesantes mencionadas anteriormente, mencionaría también las herramientas de supervisión y monitoreo que permiten iniciar el proceso, monitorear su presencia e iniciarlo si murió. Con 'monit' también puede ejecutar algunas verificaciones activas como verificar si el proceso responde a la solicitud http
fuente
Para Ubuntu uso esto:
Saludos
fuente
Prueba esto para una solución simple
cmd y salir
fuente