Esto quizás puede servirte:

<daemons>
Los daemons (o demonios) no son más que un proceso que se ejecuta en segundo plano. Estos demonios ejecutan diferentes funciones y proporcionan ciertos servicios, pero sin la interacción del usuario; son procesos de los que no "notamos" su ejecución.

Los demonios pueden ser iniciados al arrancar el sistema, al entrar en un runlevel (nivel de ejecución) determinado, o simplemente cuando nosotros los iniciemos. Veremos entonces de qué modo podemos controlar nosotros mismos los demonios (iniciarlos, pararlos, etc) y cómo podemos hacer que se inicien automáticamente.

[Iniciando y parando los demonios o daemons]

Los programas que ejecutamos como demonios pueden estar ubicados en cualquier parte del disco, pero tienen un punto en común: todos utilizan un script para ser iniciados/parados, y estos scripts se encuentran en el directorio: /etc/init.d/

Sabiendo esto, la sintaxis habitual para iniciar/parar demonios es:

/etc/init.d/<nombre_demonio> start (para iniciar el demonio)
/etc/init.d/<nombre_demonio> stop (para detenerlo)

Ejemplos

Imaginemos que en nuestro directorio /etc/init.d tenemos los siguientes scripts:

    # ls -l /etc/init.d/
    -rwxr-xr-x 1 root root 1.4k oct 26 2002 httpd
    -rwxr-xr-x 1 root root 1.0k ene 18 2002 iptables
    -rwxr-xr-x 1 root root 1.9k ene 25 2002 ppp
    -rwxr-xr-x 1 root root 2.2k oct 5 2001 rc
    -rwxr-xr-x 1 root root 4.0k abr 8 2002 sshd

Por ejemplo, si quisieramos iniciar/parar/reiniciar el servidor web, podríamos hacer lo siguiente:

    # /etc/init.d/httpd start
    # /etc/init.d/httpd stop
    # /etc/init.d/httpd restart

Y esto es válido para todos los scripts que encontremos en ese directorio. En GNU/Linux es así de sencillo iniciar y parar demonios.

[Nuestros scripts]

Pero aparte de los demonios del sistema y los demonios de determinadas aplicaciones, nosotros también podemos crear nuestros scripts para iniciar/parar/reiniciar los programas que nosotros queramos poner como demonios. Únicamente hemos de crear un script que siga la siguiente sintaxis:

    #!/bin/sh
    case "$1" in

    start)

    # código para iniciar el demonio/programa

    ;;
    stop)

    # código para parar el demonio/programa

    ;;
    restart)

    # código para reiniciar el demonio/programa

    ;;

    esac

Esto nos dice que cuando ejecutemos el script y le pasemos el parámetro start, nos iniciará el demonio, cuando le pasemos el parámetro stop lo detendrá, y cuando le pasemos el parámetro restart lo reiniciará. Normalmente sólo root tiene permisos para iniciar/parar los servicios, pero todo depende de los permisos que se le hayan puesto al script.

[Iniciando demonios automáticamente]

Ahora que ya sabemos como iniciar y parar los demonios, vamos a explicar como hacer que se inicien o paren automáticamente. En GNU/Linux podemos definir qué demonios se inician y se detienen al entrar en cada runlevel (o nivel de ejecución).

Runlevels (o niveles de ejecución)

Tenemos varios niveles de ejecución, y cada uno de ellos nos proporciona unas funcionalidades diferentes, y un entorno de trabajo distinto. La definción de cada runlevel la encontramos en el fichero /etc/inittab y suele ser la siguiente:

    0 - halt (Do NOT set initdefault to this)
    1 - Single user mode
    2 - Multiuser, without NFS (The same as 3, if you do not have networking)
    3 - Full multiuser mode
    4 - unused
    5 - X11
    6 - reboot (Do NOT set initdefault to this)

Para saber en que nivel de ejecución estamos actualmente podemos utilizar el comando runlevel

Directorios de los enlaces

Para iniciar o parar un demonio al entrar en un runlevel simplemente tenemos que crear un enlace simbólico en el directorio correspondiente al runlevel en el que queremos iniciar/parar el demonio. Los directorios con los enlaces a los scripts de los demonios son los siguientes:

/etc/rcX.d/

donde X se corresponde con el número de runlevel. Así, por ejemplo, en el directorio /etc/rc5.d/ tenemos los enlaces a los scripts de los demonios que se iniciaran/pararan al entrar en el runlevel 5.

[Sintaxis de los enlaces]

Ahora que ya sabemos donde hemos de colocar nuestros enlaces ya podemos crearlos. Es muy importante el nombre que le damos a los enlaces ya que de él depende si el demonio se inicia o se para y el orden en que se inicia/para. La sintaxis que se sigue en el nombre del enlace es la siguiente:

S<num><nombre demonio> (para iniciar el demonio apuntado por el enlace)
K<num><nombre demonio> (para parar el demonio apuntado por el enlace)

<num> es el orden en que se ejecutará; puede ir desde 00 hasta 99 (siendo 00 la máxima prioridad). Además puede haber varios con la misma prioridad. Veamos unos ejemplos para aclararlo:

    # cd /etc/rc5.d/
    # ls -l
    lrwxrwxrwx 1 root root 13 ene 8 00:45 K20ssh -> ../init.d/ssh
    lrwxrwxrwx 1 root root 18 ene 7 23:49 S10sysklogd -> ../init.d/sysklogd
    lrwxrwxrwx 1 root root 14 ene 7 23:49 S89cron -> ../init.d/cron
    lrwxrwxrwx 1 root root 16 ene 8 01:34 S91apache -> ../init.d/apache

En este ejemplo vemos que al entrar en el runlevel 5 se termina el demonio de ssh, y luego se arrancarn los demonios de sysklogd, cron y apache en este orden, respondiendo a la prioridad indicada en el nombre del enlace.

[Ejemplo resumen]

Todo esto puede parecer un poco confuso, pero vamos a ver un ejemplo práctico para poner nosotros nuestro demonio. Imaginemos que tenemos un programa que queremos que se ejecute siempre que arranque el sistema y se quede en ejecución como demonio. Haríamos lo siguiente:

1. Crearnos un script segun al sintaxis explicada anteriormente que nos permita iniciar y parar el programa que queremos ejecutar. Lo llamaremos, por ejemplo, miscript. 2. Nos logueamos como root, copiamos el script a /etc/init.d y le damos permiso de ejecución:

          $ su
          # cp miscript /etc/init.d/
          # chmod u+x /etc/init.d/miscript

3. Creamos los enlaces en los runlevels adecuados: haremos que se inicie en el runlevel 5 (X11) y en el runlevel 3 (multiusuario sin X) y que se detenga en los runlevels 6 y 0 (reiniciar y apagar):

          # ln -s /etc/init.d/miscript /etc/rc5.d/S99miscript
          # ln -s /etc/init.d/miscript /etc/rc3.d/S99miscript
          # ln -s /etc/init.d/miscript /etc/rc6.d/K01miscript
          # ln -s /etc/init.d/miscript /etc/rc0.d/K01miscript

Lo iniciamos con la mínima prioridad para dejar que se inicien antes los demonios más importantes, y lo paramos con la máxima, para que se detenga antes que los demonios más importantes.

Con esto hemos conseguido que nuestro programa se inicie al arrancar la máquina (ya que normalmente arranca en el runlevel 5 si tenemos instaladas las X o en el 3 encaso contrario) y que se detenga al apagarla o reiniciar. Realmente los enlaces para detener el demonio al apagar o reiniciar la máquina no son necesarios, ya que el demonio se terminará igualmente, pero siempre es mejor que termine en el orden adecuado.

[Apunte final]

Podemos cambiar el runlevel por defecto (el runlevel en el que quedamos una vez inicada la máquina) modificando en el fichero /etc/inittab la siguiente línea:

    id:5:initdefault:

El segundo campo corresponde al runlevel por defecto. En este caso es el 5 (iniciamos con X) pero podemos cambiarlo (por ejemplo a 3 si no queremos qeu se inicien las X automáticamente).

</daemons>

Saludos
Maikel

juan.mej...@reduc.edu.cu escribió:

Hola. He desarrollado una aplicación web y la estoy empaquetando para que sea fácilmente utilizada en Debian y sus derivados. Hasta el momento, tengo un script de inicio en /usr/share/pegotes/bin/pegotes que levanta un proceso (Java) y crea un archivo con el PID para qu sea sencillo matarlo. Sin embargo sería mucho más cómodo tener un daemon al que decirle algo como "service pegotes start" o "service pegotes stop" y que se ejecutara automáticamente al iniciar el sistema. Mis conocimientos sobre bash y los daemons de Debian son casi nulos. Alguien me puede ayudar con esto?

--
Este mensaje ha sido analizado por MailScanner
en busca de virus y otros contenidos peligrosos,
y se considera que est� limpio.





----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.



--

Este mensaje le ha llegado mediante el servicio de correo electronico que 
ofrece Infomed para respaldar el cumplimiento de las misiones del Sistema 
Nacional de Salud. La persona que envia este correo asume el compromiso de usar 
el servicio a tales fines y cumplir con las regulaciones establecidas

Infomed: http://www.sld.cu/


--
Este mensaje ha sido analizado por MailScanner
en busca de virus y otros contenidos peligrosos,
y se considera que est� limpio.

______________________________________________________________________
Lista de correos del Grupo de Usuarios de Tecnologías Libres de Cuba.
Gutl-l@jovenclub.cu
https://listas.jovenclub.cu/cgi-bin/mailman/listinfo/gutl-l

Responder a