nohup: Mantiene la ejecución de un comando pese a salir de la terminal

El comando nohup permite mantener la ejecución de un comando (el cual le pasamos como un argumento) pese a salir de la terminal (logout), ya que hace que se ejecute de forma independiente a la sesión.

Básicamente, lo que hace es ignorar la señal HUP (señal que se envía a un proceso cuando la terminal que lo controla se cierra), esto implica que aunque cerremos la terminal, el proceso se siga ejecutando.

La propia ayuda disponible en la shell (y en las páginas man) nos ayudará a entender el modo de ejecución del comando:

$ nohup --help
Modo de empleo: nohup ORDEN [ARGUMENTO]...
       o bien:  nohup OPCIÓN
Ejecuta ORDEN, descartando las señales de colgar.

      --help     muestra esta ayuda y finaliza
      --version  informa de la versión y finaliza

si la entrada estándar es una terminal, redirigirla desde /dev/null.
si la salida estándar es una terminal, añadir la salida a `nohup.out` si es posible,
en caso contrario a `$HOME/nohup.out`.
si los errores van a una terminal, redirigirlos a la salida estándar.
Para guardar la salida a FILE, use `nohup COMMAND > FILE`

Un ejemplo sencillo sería la ejecución en segundo plano de un script cualquiera, gracias al comando nohup permitiremos la continuidad de la ejecución en caso de cualquier problema con la sesión, shell de ejecución, etc:

$ nohup ./miscript.sh &

Por defecto, la salida del comando, que normalmente aparecería directamente en la terminal, será procesada a un fichero llamado nohup.out que aparecerá en la ruta donde nos encontremos al ejecutar el comando.

15 comentarios en “nohup: Mantiene la ejecución de un comando pese a salir de la terminal

  1. con el & te devuelve el control para que ejecutes otros comandos, mientras que por atras se ejecuta el que enviaste anteriormente. lo podes verificar haciendo un job

  2. Buen día. Por favor me podrían ayudar con esto.

    Estoy ejecutando un programa que contiene una línea dentro de un case con la siguiente estructura:

    nohup carpeta1/carpeta2/carpeta3/carpeta4/carpeta5/programa.sh 1 $ ;;

    El 1 es un parámetro que va a recibir programa.sh, el cual se encuentra el la carpeta4.

    El error que me sale es algo como esto:

    Sending otput to nohup.out
    nohup: carpeta1/carpeta2: Permission denied

    Cabe anotar que ya le dí permisos 777 a todas las carpetas, subcarpetas y archivos

    Graciasss

    • HAgo una correción, El 1 es un parámetro que va a recibir unprograma2.sh, el cual se encuentra el la carpeta4 y que es llamado desde programa1.sh.

  3. Hola que tal, queria saber como puedo usar este comando o que otro comando en un caso en el que debo ejecutar un scritp para levantar un servidor pero en medio me pide nombre de usuario y contraseña, he ejecutado nohup ./startManagedWebLogic.sh —– ——- pero no puedo poner el usuario ni contraseña. Desde ya muchas gracias.
    Dario.

    • Seguramente, necesites mayores privilegios para ejecutarlo. Estaría bien que pusieras aquí qué devuelve exactamente la consola cuando te refieres a «me pide nombre de usuario y contraseña».

      Saludos.

      • Hola Sidious, gracias por responder, el tema es asi, yo estoy trabajando en Windows y atraves de un terminal PUTTY ejecuto este comando, pero que pasa, si ejecuto directamente sin poner nohup por ej. ./startManagedWebLogic.sh «dominio» «http://algo.com.ar:8080», se ve por pantalla que el servidor levanta y en algun momento me deja ingresar por teclado el USUARIO y posteriormente la PASSWORD hasta que queda finalmente arriba el servidor, el problema es que al cerrar el terminal del PUTTY el servidor baja. Ahora si ejecuto esto mismo pero anteponiendo el comando nohup por delante, se puede apreciar que trabaja en segundo plano y no me permite ver la opcion para ingresar por teclado USUARIO ni PASSWORD. La idea es utilizar nohup para que en caso de cerrar la terminal el servidor se mantenga arriba. Probè enviandole como parametros el usuario y password pero no funcionó, estimo que es porque requiere de un ENTER en medio de ambos, asi que lo que estoy buscando es un comando que me permita ingresar USUARIO y PASSWORD y que ademas al cerrar la terminal no se caiga el servidor, si me puedes dar una mano se te agradecerá. muchas gracias.
        Dario.-

        • Hola Dario,

          es algo complejo de ver, sin tener acceso a la máquina. De todas formas, ¿has probado a dejar el servidor corriendo bajo un «screen»? Quizás esto sí te sirva.

          Un saludo.

        • Hola Darío.

          Te serviría poner el usuario y contraseña por delante de la instrucción:
          ./startManagedWebLogic.sh “dominio” “http://algo.com.ar:8080″ usuario:contraseña
          Por lo que recuerdo es lo que se debe ingresar, no recuerdo el orden en que debes poner dichos parámetros pero se ponen de esa manera. Tengo un script que hacía eso, además de levantar las instancias de un cluster, pero es cuestión de buscarlo entre los cachivaches.

          Un saludo

  4. Buenas

    Estoy mandando cálculos con nohup en background, pero no funciona el comando. Al reinciar mi ordenador, casi siempre, se paran los cálculos. Estoy utilizando el gaussian para cálculos de química computacional. El comando que ejecuto es:
    nohup g09 output.out &

    Y al reiniciar el ordenador, el cálculo se detiene. Alguna consejo?

      • Pues nah, no me deja porner el «menor que» ni el «mayor que » y me borra lo que pongo dentro. Ignorar el comando, sencillamente el nohup no cumple su función. Algun consejo?

Comments are closed.