Dejar en ejecución un comando al salir de una sesión en Linux – nohup

nohup

¡Hola a todos!. Referente al título de ésta entrada, más que todo se me ha presentado ésta necesidad al estar conectado vía SSH a un sistema GNU/Linux; Hay comandos que suelen tardar mucho tiempo en finalizarse por x o y factor, por ejemplo: al copiar muchos archivos de un lugar a otro, comprimir archivos pesados (o muchos), hacer respaldos de BD (mysql), etc.

Si estamos conectados a un servidor vía SSH, después de un tiempo de inactividad, la sesión se cierra… por cuanto el proceso que se supone que se tenía ejecutando «muere» al finalizar la sesión; por éste motivo existen comandos como nohup.

El comando nohup nos permite mantener la ejecución del comando aun si nos salimos de la terminal; básicamente, se ejecuta de manera independiente a la sesión en la que estamos.

Digamos, vamos a hacer un respaldo de una base de datos InnoDB de MySQL y sabemos que se tardará muuucho tiempo… Bueno, en ése caso, únicamente anteponemos el comando nohup y, como alternativa muy deseable, ponemos el ampersand al final, de tal manera mandar el proceso a segundo plano. El ejemplo sería algo así:

nohup mysqldump -u root --password="secreto" --single-transaction --add-drop-table --create-options --quick nombre-mi-bd | gzip -c -9 > /home/oscard/respaldo.gz &

Sí… sé que es una línea de comando muy larga, pero puse éste ejemplo para que en un futuro me acuerde de dicha línea también 😅

Esos parámetros son los recomendados (según investigación que hice) para hacer un respaldo correcto de una base de datos InnoDB, pero igual… sé que hay otros parámetros que se pueden añadir; también, al final, se comprime el resultado del respaldo y todo en una sola línea de comando.

Hay un detalle… y es que se ingresa la contraseña en la línea de comando, cosa que es sumamente inseguro… pero bueno, se puede evitar cambiando el parámetro –password por -p , solo que sería de quitar el ampersand del final (&), ejecutarlo, ingresar la contraseña, presionar CTRL+Z (para suspender el proceso) y luego ingresar el comando «bg 1» (sin comillas) para reanudarlo pero en segundo plano.

Muchos detalles al respecto jajaj, pero igual; el objetivo principal de la entrada es el comando nohup, así que continuemos con él.

Algo muy bueno de éste comando es que, durante y al terminar la ejecución de la línea de comando, en la misma ubicación donde se ejecutó, aparecerá un archivo llamado por defecto nohup.out con la salida estándar del proceso realizado (información que se muestra en pantalla); muy útil para saber si hubo errores, si se completó bien, etc.

Eso sería, espero les sea de utilidad. Saludos.


Comentarios por Facebook

comentarios

Deja un comentario

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

*