Digamos que está accediendo a otro sistema de forma remota a través de SSH. Desea ejecutar un comando que tarda mucho tiempo en finalizar y luego salir de la sesión SSH pero dejar el comando ejecutándose incluso si ya no está conectado con el sistema remoto. ¿Cómo haces eso? Como sabrá, una vez que salga de SSH, todos los trabajos en ejecución finalizarán. ¿Empezarías el trabajo desde el principio? No tienes que hacerlo. Aquí he proporcionado 4 métodos para mantener un comando en ejecución después de cerrar la sesión de ssh. Sigue leyendo.
Mantener un comando ejecutándose después de cerrar la sesión de SSH en Linux
Podría haber muchas maneras de hacer esto. Sin embargo, creo que los siguientes métodos son fáciles y sencillos.
Método 1 - Uso de la pantalla
La pantalla tool, un administrador de ventanas de pantalla completa con emulación de terminal VT100/ANSI, le permite desconectarse de forma segura de la sesión SSH sin salir del trabajo remoto. Será útil para aquellos que trabajan con múltiples servidores remotos. El comando de pantalla viene preinstalado en la mayoría de los sistemas operativos Linux. Por si acaso, si no está instalado, puede instalarlo usando el administrador de paquetes de su distribución.
En Arch Linux y derivados:
$ sudo pacman -S screen
En RHEL, CentOS y otros sistemas basados en RPM:
$ sudo yum install screen
En Debian, Ubuntu y otros sistemas basados en DEB:
$ sudo apt-get install screen
En SUSE/OpenSUSE:
$ sudo zypper install screen
Después de instalar screen en sus sistemas remotos, inicie la sesión de screen:
$ screen
La sesión de pantalla se ha iniciado ahora. Ahora ejecute cualquier trabajo o tarea que desee realizar en su sistema remoto.
Voy a descargar la imagen de Ubuntu 16.04:
$ wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso
Ubuntu 16.04 ISO tiene un tamaño aproximado de 1,5 GB. La descarga tardará casi una hora en una conexión de banda ancha normal. No tienes que esperar tanto. Simplemente deje el proceso de descarga ejecutándose en el sistema remoto y salga de la sesión de pantalla presionando “Ctrl-A” seguido de “d“ . Verá una salida similar a la siguiente.
[detached from 1365.pts-0.server]
Después de desconectarse de la sesión de pantalla, puede desconectarse del sistema remoto. El trabajo remoto seguirá ejecutándose en el servidor.
Puede volver a adjuntar a la sesión de pantalla en cualquier momento usando el comando:
$ screen -r
Verá que el proceso aún se está ejecutando allí.
Si tiene más de una sesión de pantalla, debe escribir el ID de la sesión de pantalla para volver a adjuntarla. Para ver el número de sesiones de pantalla, ejecute:
$ screen -ls
La salida de muestra sería:
There are screens on:There are screens on: 1382.pts-0.server (Saturday 15 July 2017 04:39:51 IST) (Detached) 1365.pts-0.server (Saturday 15 July 2017 04:38:44 IST) (Detached) 2 Sockets in /var/run/screen/S-sk.
Ahora, vuelva a adjuntar a la sesión de pantalla deseada, diga 1382 , ejecuta:
$ screen -r 1382
Para obtener más detalles, consulte las páginas man.
$ man screenDescarga recomendada - Hoja de referencia gratuita:"Hoja de referencia de la línea de comandos de Linux"
Método 2 - Usando tmux
El tmux es un multiplexor de terminales que permite crear, acceder y controlar varios terminales desde una única pantalla. Una sesión tmux se puede desconectar de una pantalla y continuar ejecutándose en segundo plano y luego volver a adjuntarse. Al igual que la herramienta Screen, también puede usar tmux para desconectarse de una sesión SSH sin salir de los trabajos remotos. El comando Tmux viene preinstalado en la mayoría de los sistemas operativos Linux. Por si acaso, si no está instalado, puede instalarlo usando el administrador de paquetes de su distribución.
En Arch Linux y derivados:
$ sudo pacman -S tmux
En RHEL, CentOS y otros sistemas basados en RPM:
$ sudo yum install tmux
En Debian, Ubuntu y otros sistemas basados en DEB:
$ sudo apt-get install tmux
En SUSE/OpenSUSE:
$ sudo zypper install tmux
Después de instalar tmux, inicie la sesión de tmux usando el comando:
$ tmux
Ahora, comienza tu tarea o trabajo. Luego desconéctese de forma segura de la sesión tmux sin salir de los trabajos remotos presionando "CTRL-b" seguido de "d" . Esto separará su sesión tmux pero dejará lo que está haciendo en esa sesión ejecutándose en segundo plano. Eso significa que todos los controles remotos se ejecutarán incluso si está desconectado de la sesión.
Para listar las sesiones disponibles, ejecute:
$ tmux ls 0: 1 windows (created Sat Jul 15 16:51:35 2017) [134x33] 1: 1 windows (created Sat Jul 15 16:53:58 2017) [134x33]
Puede volver a conectarse a la sesión de tmux utilizando el ID de sesión respectivo como se muestra a continuación:
$ tmux attach -t 0
Para obtener más detalles, consulte las páginas man.
$ man tmux
Método 3:uso de Reptyr
¿Qué sucede si olvidó iniciar los comandos en screen/tmux en primer lugar? No hay problema. Aquí es donde Reptyr viene en ayuda. Reptyr lo ayuda a mover procesos en ejecución entre ptys. Ya hemos publicado una guía detallada sobre Reptyr. Echa un vistazo al siguiente enlace.
- Reptyr:mueva un proceso en ejecución de un terminal a otro sin cerrarlo
Método 4 - Usar nohup
nohup , significa No h enfadadoup , es otra utilidad de línea de comandos que lo ayuda a ejecutar comandos de Linux incluso después de desconectarse de las sesiones de SSH. Dado que es parte de GNU coreutils, no tiene que instalarlo. Viene preinstalado en todas las distribuciones de Linux.
El uso es absolutamente fácil. Después de iniciar sesión en su sistema remoto, todo lo que tiene que hacer es:
$ nohup <command> &
Sí, es así de simple.
Ejemplo:
$ nohup wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso &
Ahora, puede salir de la sesión SSH. El trabajo remoto seguirá ejecutándose.
Inicie sesión en el sistema remoto y ejecute lo siguiente para ver la lista de trabajos en ejecución.
$ jobs -l [1]+ 1421 Running nohup wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso &
De forma predeterminada, las salidas se agregarán a 'nohup.out'. Por supuesto, puede cambiar el archivo de salida.
Aquí hay otro ejemplo.
$ nohup find -size +10M > log.txt &
El comando anterior encontrará los archivos con un tamaño superior a 10M y escribirá la salida en el archivo log.txt.
Para obtener más detalles, consulte las páginas man.
$ man nohup
Y, eso es todo por ahora amigos. ¿Tienes algo en mente? No dude en hacérmelo saber en la sección de comentarios a continuación. Más cosas buenas por venir. ¡Sigue visitando!
¡Salud!