Tutoriales

Mover un proceso en ejecución de un terminal a otro sin cerrarlo

Este tutorial paso a paso explica qué es reptil aplicación y cómo Use el comando Reptyr en Linux y Unix para mover un proceso en ejecución a una nueva terminal sistema operativo.

introducir

Suponga que está ejecutando una tarea en un servidor remoto a través de una sesión SSH en el sistema local.

Cuando inicia una tarea, no sabe cuánto tardará en completarse el trabajo remoto. Solo desea dejar el trabajo en ejecución en el servidor remoto y cerrar la sesión SSH sin eliminar el trabajo remoto, luego volver a conectarlo a la sesión SSH más tarde o al día siguiente.

Por supuesto que puede Pantalla o multiplexor sesión, desconectarse de la sesión de pantalla sin salir del trabajo remoto y salir de la sesión SSH.

Sin embargo, si olvida iniciar una sesión de pantalla en primer lugar, no podrá volver a conectarse a un proceso en ejecución más adelante. Cuando se cierra una sesión SSH, también se cierran los procesos que se ejecutan en el sistema remoto.

Entonces, ¿qué harías en esta situación? ¡No te preocupes!donde es aquí reptil Los comandos vienen para ayudar.

¿Qué es Reptyr?

reptil es una herramienta de línea de comandos para mover procesos en ejecución entre ptys.

Con Reptyr, podemos migrar o mover fácilmente un proceso de larga duración de un terminal a otro al instante sin terminarlo. Usos de Reptyr pista Una llamada al sistema adjunta al programa de destino.

Simplemente inicie un proceso de ejecución prolongada en el sistema remoto a través de una sesión SSH desde su computadora local, luego cierre la sesión SSH, vaya a casa y vuelva a conectarse al proceso en ejecución al día siguiente.

Reptyr es una aplicación de línea de comandos de código abierto. Es compatible con Linux y FreeBSD.

Instale Reptyr en un sistema Linux remoto

Primero, asegúrese de haber instalado multiplexor o Pantalla en su sistema remoto para mover un proceso en ejecución desde la terminal local a la terminal remota. Si no tiene instalado tmux/screen, consulte el siguiente enlace.

Comandos Tmux de ejemplo para administrar múltiples sesiones de terminal en Linux

Ejemplos de comandos de pantalla para administrar múltiples sesiones de terminal

A continuación, debe instalar la aplicación Reptyr en el sistema remoto.

Para instalar Reptyr en Arch Linux y sus derivados, como Endeavor OS y Manjaro Linux, ejecute:

$ sudo pacman -S reptyr

En Debian, Ubuntu, Linux Mint, Pop!_OS, ejecute el siguiente comando para instalar Reptyr:

$ sudo apt install reptyr

En Fedora, RHEL, CentOS, AlmaLinux y Rocky Linux, reptyr se puede instalar desde EPEL repositorio.

Para instalar el repositorio EPEL en sistemas basados ​​en RHEL, ejecute el siguiente comando:

$ sudo dnf config-manager --set-enabled powertools
$ sudo dnf install epel-release

Después de habilitar el repositorio EPEL, ejecute el siguiente comando para instalar Reptyr:

$ sudo dnf install reptyr

Instalar Reptyr desde la fuente

Instale las herramientas de desarrollo necesarias siguiendo las instrucciones del siguiente enlace.

Cómo instalar herramientas de desarrollo en Linux

Git clone el repositorio reptyr con comando root o sudo usuario:

$ git clone https://github.com/nelhage/reptyr.git

Ingrese al directorio reptyr:

$ cd reptyr/

Ejecute los siguientes comandos para compilarlo e instalarlo.

$ make
$ sudo make install

Compilé e instalé Reptyr desde la fuente en CentOS 7 Server Edition de 64 bits y funcionó perfectamente como se describe anteriormente.

Mueva un proceso en ejecución de un terminal a otro sin cerrarlo con Reptyr

Asegúrese de tener instalado lo siguiente en el sistema Linux remoto.

Ejemplo 1:

Para propósitos de demostración, usaré el siguiente sistema.

  • sistema remoto – Debian 11 Bullseye (nombre de usuario – ostechnix, IP – 192.168.1.20)

Paso 1: SSH en el sistema remoto

Por lo general, nos conectamos a un servidor remoto desde cualquier sistema local a través de SSH, como se muestra a continuación.

ssh remote_username@IP_of_remote_system

Usaré SSH en mi sistema remoto (AlmaLinux 8) desde mi sistema local (Debian 11).

$ ssh [email protected]
SSH en un sistema Linux remoto

Aquí, «ostechnix» es el nombre de usuario del sistema remoto y «192.168.1.20» es la dirección IP del sistema remoto. Reemplaza estos dos valores por los tuyos.

Paso 2: inicie un proceso de ejecución prolongada

Después de conectarse al sistema remoto, inicie cualquier proceso de ejecución prolongada. Iniciaré el comando «superior».

$ top

Este es el comando «superior» que se ejecuta en mi AlmaLinux conectado a través de SSH.llamémoslo Terminal 1.

Ejecute el comando Top en un sistema Linux remoto
Ejecute el comando Top en un sistema Linux remoto

Como puede ver en el resultado anterior, estoy ejecutando el comando «superior» en una máquina virtual Debian 11 a través de SSH desde mi sistema local.El comando superior se ejecutará hasta que lo detengamos manualmente presionando CTRL+C.

Todo lo que tenemos que hacer ahora es usar Reptyr para mover el proceso de comando superior en una sesión de pantalla o tmux en nuestro sistema remoto (es decir, Debian 11). Luego, finalmente cerramos la sesión SSH en el sistema local. Durante el período de transición, el comando superior continuará ejecutándose sin interrupción.

Paso 3 – Proceso de fondo

ahora presiona CTRL+Z Poner el proceso en segundo plano.entonces corre bg Reanude el proceso en segundo plano.

$ bg

Verificar trabajos en segundo plano en ejecución jobs Ordenar:

$ jobs -l

esta aquí, -l marca mostrará una lista de los PID de los trabajos en segundo plano.

Verá el siguiente resultado.

[1]+  1972 Stopped (signal)        top
proceso de fondo
proceso de fondo

Anote el PID. Lo necesitaremos más tarde para adjuntar el proceso a la terminal remota.Aquí, el PID del comando superior es 1972.

Paso 4 – Denegar el proceso

Elimine el proceso en ejecución del proceso principal actual con el comando:

$ disown top

Salida de muestra:

-bash: warning: deleting stopped job 1 with process group 1972

Ahora jobs -l El comando ya no mostrará trabajos, pero ps -a Voluntad de mando.

$ ps -a
    PID TTY          TIME CMD
   1972 pts/1    00:00:00 top
   2061 pts/1    00:00:00 ps
proceso de negación
proceso de negación

Paso 5 – Inicie una sesión de Tmux o pantalla

Inicie una nueva sesión de Tmux o Screen en el mismo terminal o en una nueva ventana de terminal.Para facilitar la comprensión, me referiré a la nueva sesión de tmux como Terminal NO2..

$ tmux
Iniciar una nueva sesión de Tmux
Iniciar una nueva sesión de Tmux

Tenga en cuenta que debe iniciar el multiplexor tmux/screen en la consola remota (Debian 11), no en la consola de nuestro sistema local.

Paso 6: adjuntar al proceso en segundo plano

Recuerda que ponemos el comando superior en segundo plano Paso 3El PID del proceso en segundo plano es 1972Si no recuerda el PID, ejecute ps -a Ordenar.

Ahora, use Reptyr para adjuntar al proceso en segundo plano usando el comando:

$ reptyr 1972
Adjuntar a procesos en segundo plano usando Reptyr
Adjuntar a procesos en segundo plano usando Reptyr

Eso es todo. Hemos movido con éxito el proceso en segundo plano a la sesión tmux.

Los comandos de nivel superior se mueven a la sesión Tmux
Los comandos de nivel superior se mueven a la sesión Tmux

Ahora puede desconectarse de forma segura de una sesión de Tmux presionando CTRL+B y DSolo cerrará la sesión de tmux, pero no los procesos que se ejecutan en ella (comando superior).

Volvemos a la terminal 1. Verifique la lista de paneles Tmux activos con el comando:

$ tmux list-panes -F '#{pane_active} #{pane_pid}'
1 2072

aquí,

  • panel_activo presentara 1 Si el panel activo.
  • panel_pid es el PID del primer proceso en el panel.

Paso 7: cierra la conexión SSH

Ahora puede cerrar la sesión SSH. Mientras su sistema remoto esté activo, el proceso (el comando Superior en nuestro caso) continuará ejecutándose en la sesión Tmux de su sistema remoto. Cerrar la conexión SSH no elimina el proceso.

Paso 8 – Vuelva a conectar a Tmux

Para volver a conectarse al proceso, simplemente SSH a su sistema remoto:

$ ssh remote_user@remote_ip

y ejecute el siguiente comando para adjuntar una sesión tmux con el proceso de nivel superior aún en ejecución.

$ tmux attach
Reconectarse a Tmux
Reconectarse a Tmux

Ahora verá procesos en ejecución en su sesión de Tmux.

De esta manera, puede iniciar cualquier cantidad de paneles Tmux y mover los procesos que se ejecutan dentro de ellos a cada panel.

Permítanme dar otro ejemplo.

Ejemplo 2:

En este ejemplo, usé cómo mover un proceso en ejecución (por ejemplo, wget) en un servidor CentOS.

paso 1 – SSH en el sistema remoto.

Paso 2 – Después de conectarse al sistema remoto, inicie un proceso de ejecución prolongada. Por ejemplo, quiero descargar la ISO de escritorio de Ubuntu 16.04 wget Ordenar.

# wget http://cdimage.ubuntu.com/daily-live/current/xenial-desktop-amd64.iso

Salida de muestra:

Descargar ISO de Ubuntu
Descargar ISO de Ubuntu

Como puede ver en la captura de pantalla anterior, el tamaño total de la descarga es de 1,5 GB y tarda más de 90 minutos en completarse.

No quiero esperar tanto o dejar de trabajar de forma remota.

Entonces, lo que voy a hacer ahora es iniciar un Pantalla o multiplexor sesión en una nueva terminal, use clon Utilidad para obtener la pantalla o ejecutar procesos en una sesión de tmux. Finalmente, eliminaré ambas sesiones ssh y me volveré a conectar al proceso en ejecución si es necesario.

Paso 3 – Abramos una nueva ventana de terminal o una nueva pestaña e iniciemos una sesión de pantalla o tmux escribiendo Pantalla o multiplexor En terminales:

# screen

o

# tmux
sesión de pantalla de inicio
sesión de pantalla de inicio

Como puede ver en la captura de pantalla anterior, la sesión de pantalla está en funcionamiento.

Paso 4 – Ahora, busquemos el proceso en ejecución desde la nueva terminal con el siguiente comando:

# ps -a

Salida de muestra:

 PID TTY TIME CMD
 2320 pts/0 00:00:11 wget
 2343 pts/1 00:00:00 screen
 2358 pts/2 00:00:00 ps

Tenga en cuenta los PID wget proceso y adjunte el proceso en ejecución a la sesión de pantalla con:

# reptyr 2320
Adjunte un proceso en ejecución en una sesión de pantalla con Reptyr
Adjunte un proceso en ejecución en una sesión de pantalla con Reptyr

¡completo! Como puede ver en la captura de pantalla anterior, el proceso wget se movió (migró) de la terminal anterior a la nueva ventana de terminal (la que se ejecuta con la sesión de pantalla).

Una vez que mueva el proceso en ejecución desde la terminal original (es decir, la terminal remota), se cerrará inmediatamente en la terminal local y se reanudará donde lo dejamos en la nueva terminal.

El proceso de descarga de Wget se detuvo
El proceso de descarga de Wget se detuvo

Paso 5 – Ahora puede desconectar o cerrar la terminal de manera segura y el trabajo continuará ejecutándose en su servidor remoto.

Para desconectarse de la sesión de pantalla, presione CTRL+A y DSi es una sesión de Tmux, presione CTRL+B y D.

Después de desconectarse de la sesión de pantalla, verá el siguiente resultado.

[detached from 2344.pts-1.server1]

Paso 6 – Para volver a conectar un proceso en ejecución, conéctese a su sistema remoto a través de SSH:

# ssh [email protected]

aquí. 192.168.1.150 es la dirección IP de mi servidor remoto.

Paso 7 – Si está utilizando una sesión de pantalla, ejecute el siguiente comando:

# screen -Dr

Para una sesión tmux, ejecute:

# tmux attach

¡Voila! El proceso en ejecución se ha vuelto a adjuntar y verá allí que el proceso de descarga aún se está ejecutando.

Use Reptyr para mover un proceso en ejecución de una terminal a otra

Como puede ver en la captura de pantalla anterior, el trabajo de wget no se interrumpió ni finalizó y aún se está ejecutando. Continuará ejecutándose mientras su sistema remoto esté activo y funcionando.

generalizar

En conclusión, Reptyr es una herramienta muy importante y útil para usuarios de Linux y administradores de sistemas de cualquier nivel. Si está cansado de un proceso que lleva mucho tiempo completar, Reptyr definitivamente lo ayudará. Simplemente abra una nueva ventana de terminal, conéctese a su servidor remoto a través de SSH, busque los ID de proceso en ejecución, muévalos de forma segura a la pantalla o sesión tmux y salga de la sesión SSH. Consulte el enlace al final de este tutorial para obtener más detalles.

Eso es todo por ahora. Bueno, te dejo que te familiarices con esta útil herramienta. Pruébalo, no te decepcionará.

recurso:

LEER  El nuevo Heroic Games Launcher, el cliente de Epic Games Store para Linux

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba