
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]
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.

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

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

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

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

Eso es todo. Hemos movido con éxito el proceso en segundo plano 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

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:

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

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

¡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.

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.

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: