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 terminales proporciona terminales "virtuales" que se ejecutan independientemente del terminal "real" (en realidad, todos los terminales actuales son "virtuales", pero ese es otro tema para otro día). El terminal virtual seguirá funcionando incluso si su terminal real está cerrada con su sesión ssh.
Todos los procesos iniciados desde la terminal virtual seguirán ejecutándose con esa terminal virtual. Cuando se vuelve a conectar al servidor, puede volver a conectarse a la terminal virtual y todo será como si nada hubiera pasado, salvo el tiempo transcurrido.
Dos multiplexores de terminal 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/
La señal HUP (o SIGHUP) es enviada por el terminal 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 finalizarán. Para evitar esto, puede hacer que sus procesos no reciban SIGHUP.
Dos métodos sencillos para hacerlo son nohup
y disown
.
Para obtener más información sobre cómo nohup
y cómo 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 ningún terminal. Este método es principalmente útil para procesos por lotes de larga ejecución que, una vez iniciados, ya no necesitan ninguna entrada del usuario.
screen
le ofrece muchas más opciones, pero si está utilizandoauthorized_keys
para permitir que las personas ejecuten un script de forma remotassh
, lanohup
opción es una manera simple y agradable para que el script inicie procesos que duran más que lassh
sesión utilizada para iniciarlos. .