Cómo usar el comando nohup en Linux

Cómo usar el comando nohup en Linux

El comando no hang up o nohup permite que los procesos de tu sistema Linux sigan ejecutándose incluso después de que se cierre la terminal. Esto es esencial para los administradores de sistemas, ya que ayuda a evitar que se interrumpan las tareas de larga duración, como las compilaciones o la supervisión.

Usar el comando nohup es sencillo: solo tienes que escribirlo en el terminal de tu sistema, seguido del proceso que quieres ejecutar de forma continua. Más allá del uso básico, puedes usarlo para ejecutar tareas en segundo plano y redirigir la salida a un archivo específico.

En este artículo, veremos con más detalle cómo usar el comando nohup y cuáles son sus aplicaciones en situaciones reales.

¿Qué hace el comando nohup?

Linux envía la señal de cierre de sesión (SIGHUP) para finalizar todos los procesos del shell cuando cierras la terminal. Esto también puede ocurrir en un sistema remoto debido a problemas de conectividad.

Para reiniciar los procesos, debes volver a ingresar manualmente los comandos de Linux o scripts. Esto puede ser tedioso y llevar mucho tiempo si hay muchas tareas de larga duración.

El comando nohup evita que los procesos reciban la señal SIGHUP y hace que sigan ejecutándose incluso después de salir de la terminal.

¿Cuáles son los casos de uso de nohup?

El comando nohup es útil para mantener tareas continuas. Aquí tienes algunos ejemplos de casos de uso populares para administradores de sistemas e desarrolladores:

  • Mantener procesos de larga duración. Las tareas de larga duración, como el procesamiento de datos o las compilaciones de software, tardan mucho tiempo e requieren reiniciarse por completo si se interrumpen. El comando nohup impide que se detengan después de cerrar sesión o de que se desconecte SSH. 
  • Mantenimiento del servidor. El uso de nohup permite que los scripts de mantenimiento del servidor, como la rotación de registros, las actualizaciones o las tareas de limpieza, se ejecuten de forma independiente de la sesión de un administrador. Esto mantiene el sistema funcionando de forma confiable. 
  • Realizando copias de seguridad automáticas. Puedes usar nohup para ejecutar scripts que hagan copias de seguridad periódicas de los datos de tu servidor incluso cuando no hayas iniciado sesión en la shell. Esta es una forma sencilla de garantizar la integridad de los datos durante operaciones largas o desatendidas.
  • Automatización y tareas programadas. Las tareas programadas, como los despliegues o la generación de reportes, pueden ejecutarse de forma independiente con nohup. Esto permite que desarrolladores e administradores de sistemas ejecuten scripts persistentes sin configurar un gestor de servicios completo como systemd. 

Sintaxis del comando nohup

La sintaxis del comando nohup se estructura de la siguiente manera:

nohup comando [opciones]

Aquí tienes el desglose de la sintaxis:

  • nohup: el nombre del comando, que le indica a la terminal que active la opción de no hang up.
  • comando: el comando, script o proceso que quieres que nohup ejecute de forma continua.
  • [opciones]: indicadores opcionales para modificar el comportamiento del comando nohup.

Las opciones del comando nohup son las siguientes:

  • –help: muestra el manual del comando nohup en la shell de tu sistema.
  • –version: muestra la versión del comando nohup, útil para comprobar si está instalado e actualizado.
  • &: un operador para ejecutar el comando, script o proceso en segundo plano en lugar de hacerlo en la shell principal.

Puedes ejecutar el siguiente comando para comprobar la versión de nohup:

nohup --version

¿Cómo usar el comando nohup?

Aquí tienes varios ejemplos del comando nohup en un caso práctico. Para seguir los pasos, abre la terminal de tu sistema o la terminal del navegador si usas un servidor privado virtual (VPS) con Linux de Hostinger.

Ejecutar un proceso con nohup

Para ejecutar un proceso de forma indefinida, usa la sintaxis básica del comando nohup de la siguiente manera:

nohup proceso

Por ejemplo, ingresa lo siguiente para ejecutar un script simple de shell Bash que muestre un mensaje de “Hello world!“:

nohup ./script.sh

Después de ejecutar nohup, puedes ver la salida del proceso en el archivo nohup.out. Comprueba su contenido con el siguiente comando cat:

cat nohup.out

Redirigiendo la salida a archivos

Para guardar la salida de los procesos ejecutados con nohup en otro archivo, usa el operador de redirección (>) así:

nohup ./script.sh > file.txt

Comprueba la salida guardada e imprime el contenido del archivo con el comando cat:

cat file.txt

Ten en cuenta que el operador de redirección anterior sobrescribirá el archivo con la nueva salida. Si quieres añadir el contenido existente al final, usa el siguiente operador:

nohup ./script.sh >> file.txt

En algunos casos, nohup no redirige los errores automáticamente, por lo que debes hacerlo manualmente. Por ejemplo, lo siguiente registrará la salida y los errores del proceso en file.txt:

nohup ./script.sh > file.txt 2>&1

Aquí tienes el desglose del comando:

  • nohup./script.sh > file.txt: el comando para redirigir la salida del proceso nohup a file.txt
  • 2: el identificador de stderr o de los errores del proceso.
  • 1: el identificador de stdout o de la salida del proceso.
  • >&: la redirección de salida que escribe los errores (2) dondequiera que vaya la salida (1), en este caso, en file.txt.

En el shell Bash, el comando también puede verse así:

nohup ./script.sh &> file.txt

Si quieres añadir errores, solo usa la redirección >> en lugar de > así:

nohup ./script.sh >> file.txt 2>&1

También puedes guardar la salida e los errores del proceso de nohup en archivos separados, así:

nohup ./script.sh > output.txt > errors.txt

Tenlo en cuenta

Ten en cuenta que no hay espacio entre el operador de redirección y stdout o stderr.

Ejecutar procesos en segundo plano

Por defecto, el comando nohup ejecuta un proceso en el shell principal de la terminal. Esto significa que debes finalizarlo para ejecutar otras utilidades, lo que puede ser un problema si tienes varias tareas.

Como solución alternativa, nohup ofrece la opción & para que puedas ejecutar el proceso en segundo plano. Esto te permite usar la shell principal para otras tareas incluso cuando el proceso está en ejecución. Así se ve el comando:

nohup proceso &

Cuando ejecutes nohup en segundo plano, tu terminal mostrará un resultado similar a este:

[1] 1234

El marcador [1] representa el orden del proceso en segundo plano en la shell actual del terminal. Por ejemplo, [1] significa el primero, [2] el segundo y así sucesivamente.

Mientras tanto, 1234 es el ID de proceso (PID) de la tarea. Esta información es esencial para identificar e impedir el proceso, que explicaremos más adelante.

Comprobar el estado del proceso de nohup

Para comprobar los procesos en ejecución iniciados con nohup, usa el comando ps seguido de su PID. Aquí tienes el comando:

ps -p PID

El proceso se está ejecutando si la terminal muestra el comando ejecutado o el nombre del script.

Si olvidas el PID, usa pgrep para comprobar el estado de un proceso de nohup con su comando o el nombre del script, así:

pgrep -a nombre-del-proceso

Por ejemplo, introduce lo siguiente si quieres comprobar si el comando sleep se está ejecutando:

pgrep -a sleep

Si olvidas tanto el PID como el nombre del proceso, usa el comando lsof para revisar los procesos que usan el archivo de salida de nohup:

lsof | grep nohup.out

Tu terminal mostrará los comandos y scripts ejecutados con nohup junto con su PID. Recuerda reemplazar nohup.out si redirigiste la salida a otro archivo.

Cómo gestionar procesos nohup

Para detener un proceso nohup que se está ejecutando en la shell principal, presiona el atajo Ctrl + C en tu teclado para enviar la señal SIGTERM, un método de finalización ordenada que permite que la tarea termine primero antes de detenerse.

Si ejecutas una tarea de nohup en segundo plano, la única forma de detenerla es usar el comando kill, que te permite terminar un proceso en Linux con su PID. La sintaxis es la siguiente:

kill PID

Por ejemplo, aquí tienes un comando para finalizar un proceso con un PID de 1234:

kill 1234

De forma predeterminada, el comando kill envía la señal SIGTERM, que puede no ser suficiente para detener un proceso que no responde. En este caso, usa la señal SIGKILL para finalizar la tarea por la fuerza.

Para enviar la señal de terminación SIGKILL con el comando kill, añade la opción -9:

kill -9 PID

Ten en cuenta que no puedes pasar los procesos de nohup del segundo plano al primer plano ni al shell principal. Esto se debe a que nohup no es interactivo y no registra tus tareas como trabajos que puedas gestionar con el comando fg o bg.

Si quieres interactuar con procesos en segundo plano, ejecútalos con herramientas alternativas que explicaremos en la siguiente sección.

¿Cuáles son las alternativas a nohup?

Además de nohup, Linux tiene otras herramientas que te permiten ejecutar comandos en segundo plano. Aquí tienes algunas opciones populares.

GNU Screen

GNU Screen es un multiplexor de terminal que te permite crear sesiones virtuales de shell que permanecen activas en segundo plano.

Como Screen es interactivo, es una excelente alternativa a nohup si quieres gestionar e ir cambiando entre procesos fácilmente.

tmux

Multiplexor de terminal (tmux) es una alternativa a Screen más moderna e intuitiva. Esta herramienta tiene funciones como una mejor división de ventanas e interfaz de usuario intuitiva, lo que hace que sea más fácil de usar que Screen.

Sin embargo, la funcionalidad más avanzada de tmux también hace que sea más difícil de aprender que Screen.

systemd-run

El comando systemd-run ejecuta procesos como un servicio, lo que es más confiable porque tus tareas tienen mejor aislamiento, manejo de dependencias e mecanismos de recuperación ante fallos.

Sin embargo, systemd-run solo está disponible en sistemas operativos basados en systemd. También es más complicado de configurar que nohup, ya que debes configurar el proceso como un servicio.

Docker

Docker es una herramienta de contenerización para ejecutar procesos en entornos dedicados, con sus propias limitaciones de recursos e instalación de software. Como las tareas pueden ejecutarse de forma independiente entre sí, esto ofrece un alto nivel de aislamiento y confiabilidad.

Docker es demasiado para tareas simples que normalmente ejecutas con nohup porque puede ser difícil de configurar e gestionar. Es ideal para procesos complejos, como configurar un flujo de despliegue consistente.

Conclusión

El comando nohup es una herramienta práctica para mantener procesos simples en ejecución en segundo plano. Es especialmente útil cuando trabajas con un servidor remoto, ya que un problema de conexión puede finalizar la sesión de la terminal.

Ten en cuenta que nohup es más adecuado para procesos simples que se ejecutan una sola vez. Para tareas más complejas, considera una herramienta alternativa con funcionalidad interactiva como Screen.

Una vez que entiendas el propósito del comando nohup, pruébalo en la terminal de tu sistema o en la terminal del navegador del VPS de Hostinger. El Hosting VPS de Hostinger también te da la opción de pedir ayuda a Kodee, un asistente de IA, si la necesitas.

All of the tutorial content on this website is subject to Hostinger's rigorous editorial standards and values.

Author
El autor

Faradilla Ayunindya

Faradilla, or Ninda, is a Content Marketing Specialist with a passion for technology, a curiosity for digital marketing trends, and a love for languages. When she's not writing Hostinger tutorials, you can find her learning about life sciences. Follow her on LinkedIn.

Lo que dicen nuestros clientes

Agregá un comentario

Llena los campos obligatorios, por favor.Acepta la casilla de verificación Privacidad, por favor.Llena los campos requeridos y acepta la casilla de verificación de privacidad, por favor.

Thank you! Your comment has been successfully submitted. It will be approved within the next 24 hours.