Saltar al contenido

Mantener un proceso de Linux en ejecución después de cerrar la sesión

Nuestro team especializado despúes de muchos días de trabajo y recopilación de de información, encontramos la respuesta, queremos que te resulte útil en tu proyecto.

Solución:

Solución 1:

El mejor método es iniciar el proceso en un multiplexor terminal. Alternativamente, puede hacer que el proceso no reciba la señal HUP.


Un multiplexor de terminal proporciona terminales "virtuales" que se ejecutan independientemente del terminal "real" (en realidad, todos los terminales de hoy son "virtuales", pero ese es otro tema para otro día). La terminal virtual seguirá funcionando incluso si su terminal real está cerrada con su sesión ssh.

Todos los procesos iniciados desde el terminal virtual seguirán ejecutándose con ese terminal virtual. Cuando te vuelvas a conectar al servidor puedes volver a conectarte a la terminal virtual y todo será como si nada hubiera pasado, salvo el tiempo que pasó.

Dos multiplexores de terminales populares son screen y tmux.

La pantalla tiene una curva de aprendizaje empinada. Aquí hay un buen tutorial con diagramas que explican el concepto: http://www.ibm.com/developerworks/aix/library/au-gnu_screen/


El terminal envía la señal HUP (o SIGHUP) a todos sus procesos secundarios cuando el terminal está cerrado. La acción común al recibir SIGHUP es terminar. Por lo tanto, cuando su sesión ssh se desconecte, todos sus procesos terminarán. Para evitar esto puedes hacer que tus procesos no reciban SIGHUP.

Dos métodos fáciles para hacerlo son nohup y disown.

Para obtener más información sobre cómo nohup y disown funciona lea esta pregunta y respuesta: https://unix.stackexchange.com/questions/3886/difference- between-nohup-disown-and

Nota: aunque los procesos seguirán ejecutándose, ya no podrá interactuar con ellos porque ya no están conectados a ninguna terminal. Este método es principalmente útil para procesos por lotes de larga ejecución que, una vez iniciados, ya no necesitan ninguna intervención del usuario.

Solución 2:

Hay algunas formas de hacer esto, pero la que encuentro más útil es usar GNU Screen.

Después de ingresar, ejecute screen. Esto iniciará otro shell ejecutándose dentro de la pantalla. Ejecute su comando, luego haga un Control-und.

Esto lo "desconectará" de la sesión de pantalla. En este punto, puede cerrar la sesión o hacer cualquier otra cosa que desee.

Cuando desee volver a conectarse a la sesión de pantalla, simplemente ejecute screen -RD desde el indicador de shell (como el mismo usuario de uso que creó la sesión).


Solución 3:

En bashla disown palabra clave se adapta perfectamente a esto. Primero, ejecuta tu proceso en segundo plano (ya sea usando &o ^Z luego escribe bg):

$ wget --quiet http://server/some_big_file.zip &
[1] 1156

Escribiendo jobs puede ver que el proceso todavía es propiedad del shell:

$ jobs
[1]+  Running  wget

Si tuviera que cerrar la sesión en este punto, la tarea en segundo plano también se eliminaría. Sin embargo, si ejecuta disownbash separa el trabajo y permite que continúe ejecutándose:

$ disown

Puedes confirmar esto:

$ jobs
$ logout

Incluso puedes combinar el & y disown en la misma línea, como:

$ wget --quiet http://server/some_big_file.zip & disown
$ logout

Esto es mejor que correr nohup en mi opinión porque no sale nohup.out archivos esparcidos por todo su sistema de archivos. También, nohup debe ejecutarse antes de ejecutar el comando: disown se puede usar si decide más tarde que desea poner en segundo plano y separar la tarea.


Solución 4:

La herramienta nohup, disponible en la mayoría de las cajas de Linux, hará esto.


Solución 5:

Solo para ser minucioso, señalaré tmux, que tiene la misma idea básica que screen:

tmux pretende ser una alternativa moderna con licencia BSD a programas como GNU screen. Las características principales incluyen:

  • Una interfaz de comandos poderosa, consistente, bien documentada y fácilmente programable.
  • Una ventana se puede dividir horizontal y verticalmente en paneles.
  • Los paneles se pueden mover y cambiar de tamaño libremente, o se pueden organizar en diseños preestablecidos.
  • Soporte para terminales UTF-8 y 256 colores.
  • Copie y pegue con múltiples búferes.
  • Menús interactivos para seleccionar ventanas, sesiones o clientes.
  • Cambie la ventana actual buscando texto en el destino.
  • Bloqueo de terminales, manualmente o después de un tiempo de espera.
  • Una base de código con licencia BSD, limpia y fácilmente ampliable, en desarrollo activo.

Sin embargo, es aproximadamente infinitamente más fácil de buscar en Google.

Si estás contento con lo expuesto, eres capaz de dejar un tutorial acerca de qué le añadirías a esta sección.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada.