Categorías: Tutoriales

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).

F. Javier Carazo Gil

Cofundador de CODECTION, empresa especializada en WordPress, autor de un libro sobre WordPress (el primero en español) y multitud de artículos (en medios físicos y virtuales) sobre el tema. Participa en la comunidad WordPress de forma activa siendo parte del equipo organizador de la WordPress Meetup de Córdoba, dando charlas en diferentes WordCamp y siendo autor y coautor de multitud de plugins libres y premium para WordPress de gran éxito.

Ver comentarios

  • Que interesante comando...

    Tengo una pregunta ¿Es posible de alguna manera montar una aplicación como demonio pero para el inicio del sistema, de modo que cada que el equipo se encienda la aplicación corra de forma predeterminada?

  • David Gómez (@emsLinux), claro, por supuesto. Creando un script en el directorio init.d y seleccionando su runlevel. Si quieres puedo dedicar una entrada explicándolo.

  • HOLA QUE EXCELENTE ARTICULO.
    TENGO UNA DUDA PERO NO TIENE NADA QUE VER CON ESTO.
    TENGO UN CD DE UBUNTU DESKTOP 10.10 Y DESDE WINDOWS EJECUTE "WUBI" QUE VENIA DENTRO DE EL CD Y PUES LO INSTALE DESDE "WUBI" Y AHORA ME APARECE UN GRUB, PERO CUANDO ARRANCA UBUNTU ME DICE Q NO SE DEFINIO DIRECTORIO RAIZ???

  • Bueno, eso no es hacer un "demonio", si quisieras hacer que funcione como un demonio, mejor mírate este enlace:
    Un adelanto:
    --------------------------------------------------

    #!/bin/bash
    ######### Lock checker ###########
    myName="`echo $0 | awk '{print $NF}' FS='/'`"
    lockDir="/var/lock/"
    lockFile=$lockDir$myName.pid
    currentPID=$$
    oldPID="`cat $lockFile`"
    oldderExist=` kill -0 $oldPID 2>/dev/null ; echo $? `
    if [ "$oldderExist" == "0" ]; then echo "An Other Instance Is Running...! PID:$oldPID" ; exit
    else echo $currentPID > $lockFile
    fi
    ######### Lock checker ###########

    --------------------------------------------------
    Más información:

    Convertir un Script Linux para que funcione como un demonio.

    Ya que lo que estás haciendo, es dejar un programa funcionando cuando abandonas la consola, que es distinto de que funcione como un demonio.

  • @Eggun gracias por el aporte.

    En efecto, coincido contigo en que esta vía no es la de creación de un demonio propiamente dicho, pero por facilidad y desarrollo es más viable según qué caso.

    No te preocupes, en los próximos días contaré como crear un demonio en lenguaje C, que puesto a elegir, supera con creces la elegancia de un shell script. Igualmente, me apunto tu nota para futuros usos. Gracias.

  • Interesante el comentario de Eggun, yo por lo general siempre uso nohup cuando me toca hacer backups

Entradas recientes

432 CVEs

5 días hace

Anti-IA

2 semanas hace

Memoria

3 semanas hace

Mal uso

4 semanas hace

Precio de la RAM

1 mes hace

AUR

1 mes hace