Ejecutar tareas de fondo en linux

Debido a la configuración que tengo en casa, utilizo bastante conexiones ssh a mi servidor para diferentes tareas. Uno de mis discos duros ha pasado a mejor vida, y he tenido que reorganizar ciertos archivos, en total 1Tb más o menos, lo cual es bastante tedioso.

Para ello, lo más rapido, como he dicho, es una conexión a traves de ssh al servidor, y hacer desde allí los movimientos necesarios, ya que mis NAS tienen conexión por cable al mismo switch que el servidor, en vez de la conexión wireless que usa mi equipo habitual.

El caso es que mover un cierto volumen de archivos lleva bastante tiempo, y claro, no siempre puedo mantener la conexion ssh abierta indefinidamente.

 

Utilizando &

Lo primero que intenté fue utilizar el terminador & para ejecutar mi cp de fondo.

cp /nas1/archivos /nas2 &

La tarea se lanza en el background, sin ningun problema, y puedo seguir trabajando con el terminal. El problema viene si intentamos cerrar la conexión ssh, todas las tareas activas se terminan, incluso si están corriendo de fondo. Así que esta solución no me servía al 100%.

Utilizando nohup

Mi segundo intento fue con nohup. Si lanzamos el comando con nohup, lo que hacemos es que la tarea permanezca activa incluso despues de cerrar el terminal, ya que no recibe la señal HUP que se envía a todas las tareas al cerrar este.

nohup cp /nas1/archivos /nas2

Cualquier mensaje generado por el comando es redireccionado al fichero nohup.out. A pesar de que esto parecía funcionar bien, por alguna razon no podía lanzar dos comandos simultaneos con nohup. El primero siempre se detenía al comenzar el segundo. No se si hay alguna forma de evitar esto, ya que antes de investigar a fondo, encontré la tercera y definitiva opción.

Screen

Hay un programa llamado screen, que en el caso de ubuntu podeis instalar con

sudo aptitude install screen

Para lanzar nuestro comando lo hacemos de la siguiente manera

screen cp /nas1/archivos /nas2

Una vez lanzado el comando, “salimos” de screen pulsando Ctrl+A y luego D.

Nuestro proceso seguira activo en una instancia de screen, y nosotros somos libres de utilizar el terminal como queramos, incluso de cerrarlo sin ningun problema.

Podemos cerrar la conexión ssh, y el proceso seguirá activo. Podemos reconectar por ssh, y utilizando screen -r, volver a la instancia de screen que queramos para comprobar como sigue nuestro proceso.

Por supuesto, podemos lanzar varias instancias de screen con diferentes comandos al mismo tiempo, y volver a cada una de ellas si queremos.

En fin, una estupenda utilidad que me ha ahorrado mucho tiempo de espera.

Leave a Reply

Your email address will not be published. Required fields are marked *