¿Qué es nohup?
nohup es la abreviatura de 'No Hang Up', lo que significa que ejecuta un comando ignorando la señal de interrupción (señal HUP). Normalmente, al cerrar una ventana de terminal, los programas en ejecución también finalizan, pero nohup actúa como un escudo para evitarlo.
3 conceptos clave
- Ignorar la señal HUP: Ignora la señal de terminación (SIGHUP) enviada por el sistema cuando el usuario cierra sesión, manteniendo el proceso vivo.
- nohup.out: Si no se especifica un archivo para guardar, los resultados de la ejecución (contenido de salida) se guardan automáticamente en el archivo `nohup.out`.
- & (Segundo plano): nohup por sí solo ocupa el terminal. Normalmente, se añade `&` al final del comando para enviarlo al segundo plano.
Sintaxis y opciones principales (Shell)
nohup no tiene opciones complejas por sí mismo. En su lugar, se utiliza en combinación con el **comando a ejecutar** y la **redirección (especificación de la dirección de salida)**.
1. Configuración de ejecución básica
2. Gestión de logs (salida)
3. Ayuda
Comando generado:
Combina los comandos.
Descripción:
`nohup` Ejecutando el comando.
Combina las opciones anteriores para ejecutar virtualmente los comandos junto con la IA.
Ejemplos de escenarios de uso
Los patrones de nohup más utilizados en la práctica.
Uso más básico
nohup ./backup.sh &
Ejecuta un script en segundo plano. La salida se acumula en `nohup.out`.
Especificar nombre de archivo de log (recomendado)
nohup python3 app.py > my-app.log 2>&1 &
Guarda los logs en `my-app.log` en lugar de `nohup.out`. `2>&1` significa que los mensajes de error también se guardarán en el mismo archivo.
Ejecutar sin logs
nohup ./heavy-task.sh > /dev/null 2>&1 &
Cuando no se necesita la salida o es demasiado voluminosa y hay riesgo de llenar el disco, se redirige la salida a `/dev/null`.
Encontrar procesos nohup en ejecución
ps -ef | grep app.py
Verifica los procesos en ejecución con el comando `ps`.
Instalación
nohup es un comando básico incluido en 'GNU Coreutils' y ya está instalado en casi todas las distribuciones de Linux.
Verificar instalación
En la mayoría de los casos, no se necesita una instalación separada. Puede verificar si está instalado con el siguiente comando.
Verificar versión
nohup --version
Consejos y advertencias
Consejos útiles
- ¿Qué pasa con las tareas ya en ejecución?: Si olvidaste usar nohup y ejecutaste un comando, puedes detenerlo con `Ctrl+z`, enviarlo a segundo plano con `bg` y luego usar `disown -h %1` para obtener el efecto de nohup.
- Cómo terminar: Los procesos iniciados con nohup no se detienen con `Ctrl+c`. Debes encontrar el PID (ID de proceso) con `ps -ef | grep [nombre]` y luego terminarlo con `kill -9 [PID]`.
- Cuidado con el espacio en disco: Si un programa de larga duración sigue escribiendo logs en `nohup.out`, el archivo puede volverse enorme y detener el servidor. Vacíalo periódicamente o usa `/dev/null`.