[HowTo] nohup: para que un trabajo iniciado en segundo plano no se cancele "si nos vamos"

Posted: martes, 25 de junio de 2019 by Termita in Etiquetas: , , , , , , , ,
0

¿Cómo hacer que si iniciamos un trabajo en segundo plano -remotamente o no- y "nos vamos" (hacemos un exit y cerramos la sesión del usuario con el que lo hemos iniciado, cerramos el terminal, estando en remoto apagamos el ordenador cliente, es decir el ordenador desde el que hemos ejecutado el comando, etcétera..) NO se cancele el trabajo?

Con nohup, tal como he leído que hace Atareao.

(*) Que conste que esto sólo lo he probado con scripts y comandos que NO abren la "pantalla" de un programa como, por ejemplo, hace Midnight Commander. Desconozco si sería viable hacerlo con ese tipo de comandos / aplicaciones.

A parte de nohup existen otras formas, otros comandos, que, como nohup, permiten controlar que el trabajo que iniciamos no se cancele si "nos vamos".
Los enumeraré ahora. Mas los trataré en otra entrada de este blog[], pues -entre otras cosas- aún nos los probé:
tmux [http://www.sromero.org/wiki/linux/aplicaciones/tmux]
screen [https://www.ochobitshacenunbyte.com/2019/04/24/que-es-y-como-funciona-el-comando-screen-en-linux/]
byobu [https://medium.com/@aliartiza75/what-is-byobu-and-how-to-use-it-b09722008d65]


Al grano mas primero hay que definir el concepto "SEGUNDO PLANO". Échenle un vistazo a ESTA[@] entrada del blog y también a:
https://www.atareao.es/como/procesos-en-segundo-plano-en-linux/
https://blog.carreralinux.com.ar/2016/09/procesos-en-segundo-plano-linux/


Ilustraremos el uso de nohup de la siguiente forma:

Estamos en remoto, conectados a otra máquina por ssh, y queremos calcular la suma de verificación de un archivo grande.
Como estamos muy atareados, no podemos permitirnos estar parados mirando cómo el trabajo se lleva a cabo y necesitamos apagar nuestro ordenador -que es el cliente desde el que lanzamos comandos en el ordenador remoto- para hacer otras cosas. Tampoco podemos permitirnos que haciendo esto el trabajo que iniciamos se cancele.

Por eso ejecutaremos el trabajo NO de esta forma:
sha256sum nombredearchivogrande > nombredearchivogrande.sha256.txt

SINO de esta otra forma:
nohup sha256sum nombredearchivogrande > nombredearchivogrande.sha256.txt &

Así, si "nos vamos" (apagamos nuestra máquina cliente, por ejemplo) el trabajo continuará en la máquina remota (servidor).

Esta imagen muestra lo que hemos hecho:


Leyenda:

1. Lanzo el comando
nohup comando &

2. El sistema responde informando que le ha asignado el número "1" a ese proceso en "segundo plano" (a causa de añadir "&" al final) que hemos iniciado.

3. [comprobación] La orden jobs nos muestra:
4. la lista de procesos que tenemos iniciados en segundo plano, el número que se le ha asignado a cada uno y el estado en que están. En nuestro caso el proceso que hemos lanzado es el nº 1 y está "Ejecutándose".

5. [comprobación] fg 1
Trae a primer plano el proceso nº 1, que no es otro que el que lanzamos en el punto 1.

6. Ctrl + Z
Pausa el proceso

7. bg 1
Manda al proceso nº 1 a sels -lagundo plano y lo reanuda.

8. [comprobación] jobs
9. vemos que el proceso nº 1 está efectivamente ejecutándose.


10. [nos vamos] salimos del usuario con el que, con sudo, estábamos trabajando.
Acto seguido cerramos la conexión ssh que teníamos con el servidor remoto donde aún se está ejecutando el comando que lanzamos hace apenas unos instantes.


11. Pasado un rato nos volvemos a loguear en el servidor remoto donde dejamos ejecutándose el proceso nº 1 aquel... ¿se acuerdan?

12. [comprobación] ls -la
Listamos el contenido de la carpeta.
13. [comprobación] Vemos que el archivo resultante del comando se ha creado y que su tamaño es mayor que cero. Esto es indicio de que el trabajo concluyó correctamente a pesar de haber cerrado la conexión.

14. [comprobación] cat nombredelarchivoresultantedeltrabajo.txt
Constatamos que el contenido es correcto y que el trabajo concluyó correctamente a pesar de haber cerrado la conexión.




---------------------------------------------

Fuentes:







0 comentarios: