viernes, 24 de marzo de 2023

Comandos nohup y disown

Posted by q3it on viernes, marzo 24, 2023 in


Uno de los problemas que pueden surgir cuando nosotros trabajamos remotamente en un servidor, es que nuestra conexión se caiga y que estemos ejecutando un comando. Al perder esa conexión el servidor dejará de funcionar, pero existen dos opciones para solucionar esto. El comando nohup y el comando disown, lo que hace nohup es ejecutar una aplicación sin asociarla a una sesión y es muy simple, ponemos el comando nohup luego el comando que nosotros queremos y luego un ampersand indicando que lo vamos a ejecutar en segundo plano. Si nuestro comando genera alguna salida pero no lo hemos redirigido, entonces se guardará un fichero nohup.out en el directorio en donde nosotros hemos ejecutado este comando.
 
Vamos a ver un ejemplo, tenemos un script que se llama date.sh que lo único que hace es visualizar la fecha cada segundo.


Nosotros vamos a redirigir esta salida a un fichero llamado date.log y lo vamos a ejecutar en segundo plano. 
 
 
El fichero va transcurriendo, se va rellenando cada segundo. Si nosotros cerramos sesión y volvemos a conectarnos con el servidor, vemos que el fichero no se actualiza. Cuando nosotros cerramos sesión ha acabado su ejecución, entonces podemos utilizar nohup, utilizamos el mismo proceso de ejecución y  dirigimos al mismo fichero y otra vez indicamos que lo vamos a mandar a segundo plano.

 
Si hacemos un jobs, veremos nuestro comando y también como el fichero se va actualizando cada segundo, si cerramos sesión y volvemos a entrar veremos que comando sigue ejecutándose. Eso se debe a que el comando está asociado al sistema no a una sesión concreta de un usuario.
 
El segundo comando es disown y es muy parecido al que vimos anteriormente, y lo que hace es desasociar un trabajo de la sesión, pero tiene que ser un comando que nosotros tengamos en primer plano, luego lo tenemos que mandar a segundo plano, y este comando lo va a asociar a esta sesión. Entonces nosotros podremos cerrar la sesión y no pasará nada, haremos el mismo proceso anterior y, si nosotros lo tenemos en primer plano pues simplemente con ctrl Z lo mandamos a segundo plano, para ponerlo en nuestra lista de trabajo. Este proceso está asociado a nuestra sesión, aplicando el comando disown  el proceso pasará a ser del sistema y así cerremos la sesión el seguirá ejecutándose. Estas son dos nuevas maneras de ejecutar un proceso sin tener que tener la conexión abierta a un servidor.