Crear un demonio en Linux (con nohup)

Bien, no es la forma más “bonita”, pero sí una de las más efectivas. Si queremos lanzar una aplicación como un demonio de UNIX podemos usar el comando nohup. Con este comando estaremos:

  • Ignorando la señal HUP, de esta forma permitimos que el programa continúe su ejecución después de que el usuario que lanzó el comando abandone la sesión.
  • Almacenando la salida del programa (STDOUT) en un fichero texto. Así, si queremos saber qué está ocurriendo podemos leer el contenido del fichero nohup.out

Veamos cómo lanzarlo:

ahornero@6581-D:~$ nohup el_commando_o_programa

Como ejemplo, podemos lanzar lo siguiente:

ahornero@6581-D:~$ nohup sleep 1000 &
nohup: ignoring input and appending output to `nohup.out’

Abandonamos el terminal

ahornero@6581-D:~$ logout

Y volvemos a entrar. Ahora miramos qué PID tiene el programa en ejecución:

ahornero@6581-D:~$ ps aux | grep sleep
4076 4596 4076 4784 pty0 1002 13:01:36 /usr/bin/sleep

También podemos usar directamente pgrep y obtendremos directamente el PID:

ahornero@6581-D:~$ pgrep sleep
4076

Si queremos saber qué está ocurriendo hacemos un seguimiento del fichero nohup.out

ahornero@6581-D:~$ tail -f nohup.out

En este caso no obtendremos nada, ya que sleep no escribe nada por la salida estándar (ni por ninguna otra).

Para terminar, matamos el proceso de una forma más o menos elegante, mandando una interrupción al proceso:

ahornero@6581-D:~$ kill -SIGINT $(pgrep sleep)

También podréis usar directamente pkill o usar SIGKILL para, directamente, matarlo. Aquí os dejo una referencia de las señales en Linux (POSIX y ANSI).