Digamos que lanzo un montón de procesos desde una sesión SSH. ¿Es posible terminar la sesión SSH mientras se mantienen esos procesos en ejecución en la máquina remota?
Deberías buscar alternativas modernas como tmux
.
tmux
es superior a screen
por muchas razones, aquí hay solo algunos ejemplos:
- Las ventanas se pueden mover entre sesiones e incluso vincular a varias sesiones
- Las ventanas se pueden dividir horizontal y verticalmente en paneles
- Compatibilidad con terminales de color UTF-8 y 256
- Las sesiones se pueden controlar desde el shell sin necesidad de introducir una sesión
Funcionalidad Básica
Para obtener la misma funcionalidad que se explica en el respuesta recomendar screen
, tendría que hacer lo siguiente:
- ssh en la máquina remota
- empezar
tmux
escribiendotmux
en el shell - inicie el proceso que desee dentro de la aplicación
tmux
sesion - deje/separe el
tmux
sesión escribiendo Ctrl+b y luego d
Ahora puede cerrar sesión de forma segura en la máquina remota, su proceso seguirá ejecutándose en el interior tmux
. Cuando regrese y desee verificar el estado de su proceso, puede usar tmux attach
para adjuntar a su tmux
sesion.
Si desea que varias sesiones se ejecuten una al lado de la otra, debe nombrar cada sesión con Ctrl+b y $
. Puede obtener una lista de las sesiones que se están ejecutando actualmente mediante tmux list-sessions
, ahora adjúntelo a una sesión en ejecución con el comando tmux attach-session -t <session-name>
.
tmux
puede hacer cosas mucho más avanzadas que manejar una sola ventana en una sola sesión. Para obtener más información, eche un vistazo en man tmux
o la página de GitHub de tmux. Especialmente, aquí hay una pregunta frecuente sobre las principales diferencias entre screen
y tmux
.
Opción 1: nohup
La mejor manera es a menudo la más simple.
nohup long-running-command &
Fue hecho específicamente para esto, incluso registra stdout a nohup.log
.
man nohup
Opción 2: bg
+ disown
ctrl+zbgdisown -h
Si desea" en segundo plano & quot; las tareas que ya se están ejecutando, entonces Ctrl+Z luego corre bg
para poner su tarea suspendida más reciente en segundo plano, lo que le permite continuar ejecutándose. disown
mantendrá el proceso en ejecución después de cerrar la sesión. El -h
la bandera evita el bloqueo.
screen
y otros pueden hacerlo, pero para eso no están. Recomiendo nohup
para tareas que sabes que vas a dejar atrás y bg
para las tareas que ya está ejecutando y que no desea reiniciar.
Ten en cuenta que ambos son específicos de bash. Si no estás usando bash, entonces los comandos podrían ser diferentes.
Podrías hacer eso usando screen
.
Tipo man screen
para obtener más información o leer esto página de manual de pantalla.
Simple escenario:
ssh en su caja remota. Tipo
screen
A continuación, inicie el proceso que desee.Pulsar Ctrl-A entonces Ctrl-D. Esto "desconectará" su sesión de pantalla, pero dejará sus procesos en ejecución. Ahora puede cerrar sesión en el cuadro remoto.
Si desea volver más tarde, inicie sesión de nuevo y escriba
screen -r
Esto "reanudará" su sesión de pantalla y podrá ver el resultado de su proceso.
Screen y nohup es la mejor manera, pero si tiene que separar un proceso que ya se está ejecutando sin screen o nohup, puede ejecutar el comando disown.
disown [-ar] [-h] [
jobspec
… |
pid
… ]
Sin opciones, elimine cada una especificación de trabajo de la tabla de trabajos activos. Si el
-h
si se da la opción, el trabajo no se elimina de la tabla, pero se marca de modo que SIGHUP no se envíe al trabajo si el shell recibe un SIGHUP. Si especificación de trabajo no está presente, y tampoco el-a
ni el-r
si se proporciona la opción, se utiliza el trabajo actual. Si no especificación de trabajo se suministra, el-a
opción significa eliminar o marcar todos los trabajos;-r
opción sin a especificación de trabajo el argumento restringe la operación a trabajos en ejecución.
Con disown puede cerrar la terminal y hacer que el proceso se ejecute en la máquina.
Estaba atrapado en un gran MV, así que no estaba en condiciones de detener el proceso, configurar la pantalla y luego volver a iniciarlo. Logré salir de la sesión SSH con el proceso en ejecución esencialmente haciendo los siguientes pasos:
- Establecer conexión SSH:
ssh user@host
- Ejecute el comando deseado para iniciar el proceso
- Pulsar Ctrl+Z para pausar el proceso
- Ejecutar
bg
para poner el proceso en pausa en segundo plano y reanudarlo. - Ejecutar
disown [pid]
(el ID de proceso es opcional, el valor predeterminado es el último proceso) para anular el proceso. Para obtener una lista de trabajos, simplemente escribajobs
antes. - Salga de la sesión SSH ejecutando
logout
.
Uso de la disown
comando:
disown [-ar] [-h] [jobspec ... | pid ... ] Without options, remove each jobspec from the table of active jobs. If jobspec is not present, and neither the -a nor the -r option is supplied, the current job is used. If the -h option is given, each jobspec is not removed from the table, but is marked so that SIGHUP is not sent to the job if the shell receives a SIGHUP. If no jobspec is supplied, the -a option means to remove or mark all jobs; the -r option without a job‐ spec argument restricts operation to running jobs. The return value is 0 unless a jobspec does not specify a valid job.
Hay dos programas principales que puede usar para mantener los programas y el estado del terminal a través de múltiples conexiones SSH. Son pantallas para el titular, pero desafortunadamente no se mantienen. Aparentemente desarrollándose activamente ahora) y tmux (más reciente, mantenido activamente). Byobu es un front-end que puede ejecutarse sobre cualquiera de estos sistemas y ofrecer información adicional sobre el estado de Ubuntu. En instalaciones nuevas, usará tmux como backend, si tiene una instalación anterior de byobu y una configuración existente, mantendrá el backend anterior, ya sea screen o tmux.
Byobu
Byobu se puede instalar en la computadora haciéndolo en una máquina basada en Debian:
sudo aptitude install byobu
Usando yum, lo haces
su -c 'yum install byobu'
También es posible instalar byobu en otras distribuciones.
Uso de byobu
Puede iniciar byobu ejecutando byobu
en la máquina host después de conectarse mediante ssh.Esto le dará un caparazón que se ve así:
También puede usar Byobu Terminal en una máquina Ubuntu con la opción-X y tener fácilmente un byobu que funcione perfectamente.
Uso:
Inicie byobu escribiendo byobu
.
Puede presionar F2 para crear una nueva ventana dentro de la sesión actual, F3-F4 para cambiar entre las distintas ventanas.
La mejor parte de byobu es que no tiene que matar los procesos que se ejecutan en la terminal para salir de la terminal. Simplemente puede enviar screen / tmux (el esqueleto de byobu) a un segundo plano y reanudarlo la próxima vez que venga:
Para salir de byobu y mantenerlo en funcionamiento (separar), presione F6.
-
La próxima vez que vengas, solo hazlo
byobu
y volverás justo donde estabas.
También puede crear varias sesiones de byobu byobu -S session1
y así sucesivamente. Y puedes conectarte con cualquiera de ellos cuando regreses.
Puedes hacer mucho más usando Byobu. ¡Úsalo!Algunas guías definitivas son aqui, o aqui.
No puede hacer esto una vez que el proceso ha comenzado, debe haber configurado las cosas antes de ejecutar un trabajo de ejecución prolongada.
Puedes usar nohup pero la sabiduría moderna sugiere que use screen o byobu como su inicio de sesión para que pueda desconectarse y dejar las cosas en funcionamiento.
La pantalla tiene la ventaja de que puede separarse de una máquina y volver a conectarse a otra, lo cual es útil si desea verificar procesos de larga ejecución que se ejecutan más allá del final de la jornada laboral.
Hay una forma razonable de comenzar guía para la pantalla aqui.
byobu pone una interfaz fácil de usar en la parte superior de la pantalla con menús, etc. También es la implementación actual de screen en Ubuntu más nuevo. F2 para iniciar un nuevo terminal F3/F4 para alternar hacia adelante y hacia atrás y F6 para desconectar. Escriba exit para terminar los terminales de forma permanente.
Para un solo script de shell que tengo ejecutándose durante un largo período de tiempo, iniciaré sesión y ejecutaré el proceso en segundo plano usando '&'.
Ejemplo:
/path/to/my/script &
He cerrado sesión y desconectado mi sesión SSH. Cuando inicio sesión algún tiempo después, el script aún se está ejecutando, como lo demuestra la recopilación continua de datos del script.
Oye, aunque estuve de acuerdo en que la pantalla es la opción más efectiva.Puede usar vncserver y luego iniciar el proceso en él.
Además, si su único interés es tener el proceso en ejecución y no necesita recuperar el control, y lo más importante es que no sabía que necesitará cerrar la sesión y que ya tiene el proceso en ejecución, no tiene suerte si usó bash como shell
Primero debe enviar el proceso a segundo plano escribiendo Ctrl + Z seguido de bg %1 (el número depende del número de trabajo, generalmente es 1, pero puede extraer fácilmente la lista con el comando trabajos)
Finalmente, invoque el comando disown (seguido del ID de trabajo ... igual que con el comando bg)
Esto eliminará la relación padre-hijo entre su shell y el proceso en segundo plano, evitando que muera cuando finalice su shell.
Deberías echarle un vistazo Pantalla GNU y a ver si te ayuda. Dependiendo de cómo necesite que la aplicación se ejecute en tiempo real, puede causar más problemas de los que resuelve, pero al menos le permitirá reanudar su sesión como si nunca la hubiera abandonado.
Modo de empleo :
- Utilice el comando
screen
para el primer inicio, desplácese por los mensajes de introducción, se le debe entregar un terminal. - C-a C-c abre otra terminal
- C-a C-k mata una terminal
- Puede usar C-a C-Space y C-a C-Backspace para recorrer los terminales
- C-a C - a es útil si utiliza principalmente solo dos terminales
- C-a C-d instala la sesión de pantalla actual y sale de las pantallas. A continuación, puede utilizar
screen -r
para reanudar la sesión. Puede tener varias sesiones de pantalla separadas a la vez, en este caso se le mostrará una lista de sesiones disponibles.
Hay muchas otras opciones, por ejemplo, pantallas divididas, y también todos los accesos directos son totalmente personalizables.