Cuando ejecutamos un proceso largo en un servidor remoto y cerramos la sesión SSH, el
proceso recibe la señal SIGHUP y termina. nohup (no hang up) evita esto: lanza el
proceso de forma que ignore esa señal y siga ejecutándose aunque la sesión se cierre.
El uso más básico es añadir nohup delante del comando y & al final para enviarlo a
segundo plano:
nohup python mi-script.py &
nohup confirma que está redirigiendo la salida:
nohup: ignoring input and appending output to `nohup.out'
La salida del proceso (tanto stdout como stderr) se redirige automáticamente a un archivo
nohup.out en el directorio actual, a menos que la redirijamos nosotros:
nohup python mi-script.py > /tmp/mi-script.log 2>&1 &
El proceso sigue vivo aunque cerremos la sesión SSH. Para verlo después de reconectar
usamos ps o
htop:
ps aux | grep mi-script.py
Y para terminarlo cuando ya no lo necesitemos, usamos
kill con su PID.
La diferencia con screen es que
nohup es más simple pero no permite reconectar a la sesión: solo garantiza que el
proceso siga vivo. screen permite además volver a ver la salida en tiempo real y
interactuar con el proceso después de reconectar. Para procesos no interactivos (scripts,
migraciones, conversiones), nohup es suficiente; para procesos con los que necesitamos
interactuar, screen es mejor opción.