Ejecutando Procesos Después del Cierre de Sesión
A veces necesitas que un proceso continúe ejecutándose incluso después de cerrar sesión en la terminal. El comando nohup te permite ejecutar un comando que seguirá ejecutándose incluso después de salir del shell.
Creemos un script que se ejecutará durante mucho tiempo:
cd ~/project
nano persistent-task.sh
Añade el siguiente contenido:
#!/bin/bash
## This script runs for a very long time
echo "Starting persistent task at $(date)" > persistent-output.log
for i in {1..100}; do
echo "Iteration $i at $(date)" >> persistent-output.log
sleep 10
done
echo "Persistent task completed at $(date)" >> persistent-output.log
Guarda y sal de nano, luego haz que el script sea ejecutable:
chmod +x persistent-task.sh
Ahora, ejecútalo con nohup y ponlo en segundo plano:
nohup ./persistent-task.sh &
Verás una salida similar a:
[1] 5678
nohup: ignoring input and appending output to 'nohup.out'
Esto significa que el proceso se está ejecutando en segundo plano y continuará incluso si cierras sesión. La salida que normalmente iría a la terminal se redirige a un archivo llamado nohup.out.
Consejo para Gestionar la Salida: Si no quieres que la salida del proceso en segundo plano aparezca en tu terminal y potencialmente interfiera con tu trabajo, puedes redirigir la salida a un archivo:
## Redirigir la salida a un archivo específico
./long-task.sh > task-output.log 2>&1 &
## O redirigir a /dev/null para descartar la salida por completo
./long-task.sh > /dev/null 2>&1 &
El 2>&1 redirige tanto la salida estándar como la salida de error. De esta manera, el proceso en segundo plano se ejecuta silenciosamente sin saturar tu terminal.
Puedes comprobar si el proceso se está ejecutando:
ps aux | grep persistent-task.sh
Y puedes examinar el archivo de salida:
cat persistent-output.log
La salida muestra la hora de inicio y las iteraciones de la tarea persistente.
El Comando disown
Otra forma de mantener los procesos en ejecución después de cerrar sesión es usar el comando disown. Primero, ejecuta un proceso en segundo plano:
cd ~/project
./persistent-task.sh &
Luego usa disown para desvincularlo de la terminal:
disown %1
Ahora este proceso continuará ejecutándose incluso si cierras la terminal.
Estos comandos son esenciales al ejecutar tareas en servidores remotos donde necesitas que los procesos continúen después de desconectarte.