jueves, 8 de octubre de 2015

Ejecutar comandos y cerrar la terminal sin que mueran



Hay ocasiones en las que lanzamos un proceso en la terminal que va a tardar mucho tiempo en finalizar y nos vemos obligados a mantener abierta esa terminal, porque cerrarla supone matar el proceso que hemos lanzado. Bueno, es incómodo, pero tampoco mortal.

El problema viene cuando estas conectado por SSH y tienes que lanzar ese proceso. Si falla tu conexión, te desconectará, la sesión se cerrara y el proceso morirá haciéndote perder todo tu trabajo. Mal asunto.


Pero todo en esta vida tiene solución. Y la solución es bien sencilla en este caso. Solo tienes que anteponer el comando nohup al que tú quieras poner.  Así, por ejemplo, imaginemos  que tenemos que lanzar un comando tal que así:


En lugar de lanzarlo así, pondremos:


Y ya nos importa bien poco que el ADSL nos juegue una mala pasada y perdamos la conexión de SSH, porque el proceso seguirá a lo suyo hasta el fin.

Además, si queremos seguir trabajando con esa terminal o esa conexión SSH sin esperar a que el proceso termine, añadimos al final el carácter & para que todo se marche al segundo plano (background) y podamos seguir a lo nuestro.

  • nohup comando-o-script-que-tarda-muchiiiiiiiiiiisimo opciones opciones y-mas-opciones &

Y ya para rizar el rizo, nohup nos generará un fichero llamado nohup.out que es una especie de log del proceso, donde nohup enviará todo lo que normalmente iría a la salida standar. Muy útil para ver qué ha fallado si las cosas no salieron bien, y que yo suelo borrar sin pensar.

Por algo soy un Bruto con Debian

P.D. Mis agradecimiento a mi compi de curro Isma, que es quien me ha descubierto el comando

4 comentarios:

  1. Más de una vez he necesitado hacerlo, pensaba que no se podía y ni siquiera buscaba una posible solución. ¡Gracias!

    ResponderEliminar
  2. Gracias, como dice Antonio crei que no se podia y que era algo normal. Muchas gracias. PD: Muy buen blog, te leo constantemente. Un saludo

    ResponderEliminar
  3. nohup es genial! me ha salvado la vida más de una vez. Otra cosa que me traía de cabeza, es el fichero nohup.out que genera. Cuando me hizo falta, era para dejar un comando puesto en una Raspberry, tenía poca memoria y el programa mucha salida; así que al final al cabo de unas semanas petaba. He aquí: nohup comando >/dev/null 2>&1 & evita que se cree el log.

    Un saludo, el blog genial!

    ResponderEliminar

prekes sodui