El comando nohup en Linux: ejecutar procesos inmunes al cierre

¿Qué es nohup?

El comando nohup (abreviatura de “no hang up”) es una herramienta esencial en los sistemas tipo Unix que permite ejecutar un proceso de forma que ignore la señal SIGHUP, la cual se envía a los procesos cuando la sesión de la terminal se cierra. Sin nohup, al cerrar la sesión o al desconectarse por SSH, el proceso hijo recibiría SIGHUP y se terminaría abruptamente, lo que puede provocar pérdida de datos o interrupción de tareas críticas. Con nohup, el proceso continúa su ejecución en segundo plano, y su salida estándar y error se redirigen, por defecto, a un archivo llamado nohup.out en el directorio actual, a menos que se especifique otro destino. Esta característica hace que nohup sea ideal para scripts de respaldo, compilaciones largas, actualizaciones de sistemas o cualquier tarea que requiera permanecer activa después de que el usuario abandone la terminal.

Sintaxis básica

La forma más simple de usar nohup es:

nohup comando [argumentos] &

El ampersand (&) al final envía el proceso a segundo plano después de que nohup lo haya lanzado. Si no se incluye el &, el proceso se ejecutará en primer plano y la terminal quedará bloqueada hasta que finalice, aunque seguirá ignorando SIGHUP. Además, es posible redirigir la salida estándar y el error de forma explícita:

nohup comando > salida.log 2> error.log &

De esta manera, el administrador puede controlar dónde se guardan los registros y evitar que el archivo nohup.out crezca sin control. También es posible combinar nohup con nice o ionice para ajustar la prioridad de CPU o I/O del proceso.

Ejemplos de uso

  • Ejecución de un script de respaldo nocturno:
    nohup /usr/local/scripts/backup.sh > /var/log/backup_nohup.out 2>&1 &
  • Compilación de un proyecto grande:
    nohup make -j$(nproc) > build.log 2>&1 &
  • Ejecutar un servidor de desarrollo en segundo plano:
    nohup python3 manage.py runserver 0.0.0.0:8000 > server.log 2>&1 &
  • Actualización remota de paquetes mediante SSH:
    nohup apt-get update && apt-get upgrade -y > /tmp/upgrade.log 2>&1 &

En cada caso, el proceso continúa aunque la sesión SSH se cierre, y los registros se guardan en los archivos especificados para su posterior revisión.

Diferencias con & y disown

El operador & solo coloca un trabajo en segundo plano, pero no lo protege de la señal SIGHUP; si la terminal se cierra, el trabajo recibirá la señal y se terminará, a menos que haya sido desconectado previamente. El comando disown, disponible en shells como Bash y Zsh, elimina el trabajo de la tabla de trabajos del shell, impidiendo que el shell lo tenga en cuenta y, por ende, que le envíe SIGHUP al cerrarse. Sin embargo, disown debe ejecutarse después de que el proceso haya sido iniciado, y no redirige la salida automáticamente. En cambio, nohup actúa de forma preventiva: antes de lanzar el proceso, le indica que ignore SIGHUP y, por defecto, redirige su salida a nohup.out. Por lo tanto, nohup es la opción más directa cuando se necesita garantir la continuidad de un proceso desde el momento de su lanzamiento.

  • & → segundo plano, vulnerable a SIGHUP.
  • disown → elimina del job control, pero requiere acción posterior.
  • nohup → ignora SIGHUP desde el inicio y gestiona la salida.

Buenas prácticas

  • Revisar periódicamente el archivo nohup.out o los logs personalizados para detectar errores o mensajes inesperados.
  • Utilizar rotación de logs (por ejemplo, con logrotate) si el proceso genera mucha salida, evitando que el disco se llene.
  • Combinar nohup con herramientas de multiplexión como screen o tmux cuando se necesite interacción ocasional con el proceso.
  • Evitar ejecutar comandos que requieran entrada interactiva bajo nohup, ya que no podrán leer de la terminal y podrían quedar bloqueados.
  • Cuando se necesite cambiar la prioridad del proceso, usar nice o ionice antes de nohup, por ejemplo: nice -n 10 nohup comando &.

Conclusión

El comando nohup es una solución sencilla y fiable para mantener procesos en ejecución después de cerrar la terminal o desconectarse de una sesión SSH. Al hacer que el proceso ignore la señal SIGHUP y redirigir su salida a un archivo de registro, nohup evita interrupciones inesperadas y facilita la administración de tareas largas o críticas. Conocer su sintaxis, comprender cómo se diferencia de simples operadores de segundo plano y aplicar buenas prácticas de registro y prioridad permite a cualquier administrador de sistemas o desarrollador aprovechar al máximo esta herramienta en entornos Linux.