¿Que demonios existen en nuestro sistema?
Para conocer los demonios que tenemos en nuestro sistema debemos ejecutar el siguiente comando desde una terminal:ls -l /etc/init.d/Esto nos va a listar una serie de archivos que son scripts los cuales son los demonios. Esto scripts contienen el código para iniciar o para nuestro demonio, pero no necesariamente el programa que se ejecuta debe estar en esta carpeta, puede estar en cualquier parte del sistema.
Veamos un ejemplo de lo que nos puede mostrar por la consola de la terminal:
-rwxr-xr-x 1 root root 1175 2010-11-22 08:04 binfmt-support -rwxr-xr-x 1 root root 1784 2011-04-04 22:35 bluetooth -rwxr-xr-x 1 root root 2341 2009-09-07 15:58 bootlogd
¿Como iniciar y detener los demonios?
Para poder iniciar un demonio ya existente en nuestro sistema operativo debemos ejecutar el siguiente comando:/etc/init.d/demonio startSi en cambio lo queremos detener deberemos ejecutar:
/etc/init.d/demonio stopVeamos como podemos usar estos comando para por ejemplo iniciar el demonio de impresión
/etc/init.d/cups start /etc/init.d/cups stop
¿Como crear mi propio demonio?
Antes que nada en este post mostraremos como crear un demonio por medio de un script, para ello lo primero que haremos es abrir el editor que mas nos guste (vi, nano, gedit) y copiaremos el siguiente template para la creación del demonio.# Script template para demonios #!/bin/sh programa=/home/usuario/programa/ #HOME del programa a ejecutar startup=$programa/bin/startup.sh #código para iniciar el programa shutdown=$programa/bin/shutdown.sh #código para parar el programa start(){ echo -n $"Starting service: " $startup RETVAL=$? echo } stop(){ echo -n $"Stopping service: " $shutdown RETVAL=$? echo } restart(){ stop sleep 10 start } # Dependiento del parametro que se le pase #start - stop - restart ejecuta la función correspondiente. case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) echo $"Usar: $0 {start|stop|restart}" exit 1 esac exit 0
El template anterior es tan solo un simple ejemplo, pero se le pueden agregar mas cosas y hacerlo mas complejo como por ejemplo: que guarde un log de las tareas que se están haciendo, que guarde el PID del proceso y lo mate con este o agregar un parámetro status para chequear si el demonio se encuentra levantado entre otras cosas.
¿Como hacer que se inicie automáticamente?
Para que un demonio se inicie o se detenga automáticamente cuando iniciamos y apagamos el sistema respectivamente debemos asignar los runlevels.¿Que son los runlevels?
El término runlevel o nivel de ejecución se refiere al modo de operación en los sistemas operativos que implementan el estilo de sistema de arranque de iniciación tipo UNIX System V.Veamos otra definicion, según la Wikipedia: “En términos prácticos, cuando el computador entra al runlevel 0, está apagado, y cuando entra al runlevel 6, se reinicia. Los runlevels intermedios (1 a 5) difieren en relación a qué unidades de disco se montan, y qué servicios de red son iniciados. Los niveles más bajos se utilizan para el mantenimiento o la recuperación de emergencia, ya que por lo general no ofrecen ningún servicio de red. Los detalles particulares de configuración del runlevel varía bastante entre sistemas operativos, y ligeramente entre los administradores de sistema.”
Los 7 niveles de ejecución(runlevels) estandar
Nivel de ejecución | Nombre | Descripción |
---|---|---|
0 | Alto | Alto o cierre del sistema (Apagado) |
1 | Modo de usuario único (Monousuario) | No configura la interfaz de red o los demonios de inicio, ni permite que ingresen otro usuarios que no sean el usuario root, sin contraseña. Este nivel de ejecución permite reparar problemas, o hacer pruebas en el sistema. |
2 | Multiusuario | Multiusuario sin soporte de red. |
3 | Multiusuario con soporte de red. | Inicia el sistema normalmente. |
4 | – | No usado. |
5 | Multiusuario gráfico (X11) | Similar al nivel de ejecución 3 + display manager. |
6 | Reinicio | Se reinicia el sistema. |
¿Como asigno un runlevels?
Antes que nada debemos copiar nuestro script(miScript) a /etc/init.d/ que es donde están los scripts de los demonios:sudo cp miScript /etc/init.d/
Luego darles los permisos necesarios para el owner, group y ejecución:
sudo chmod ug+x /etc/init.d/miScript
Para asignar los runlevels tenemos dos formas:
- Manualmente
Si hacemos un ls -l en cualquier de estos directorios vamos a obtener algo así:
$ ls -l /etc/rc6.d/ total 4 lrwxrwxrwx 1 root root 18 2011-08-19 18:14 K01nxsensor -> ../init.d/nxsensor lrwxrwxrwx 1 root root 18 2011-08-19 18:14 K01nxserver -> ../init.d/nxserver lrwxrwxrwx 1 root root 18 2011-11-08 12:56 K01timidity -> ../init.d/timidity lrwxrwxrwx 1 root root 17 2011-07-13 11:09 K09apache2 -> ../init.d/apache2 lrwxrwxrwx 1 root root 17 2011-07-11 12:44 K20hddtemp -> ../init.d/hddtemp lrwxrwxrwx 1 root root 20 2012-02-17 18:44 K20nullmailer -> ../init.d/nullmailer lrwxrwxrwx 1 root root 27 2011-07-11 12:44 K20speech-dispatcher -> ../init.d/speech-dispatcher lrwxrwxrwx 1 root root 29 2011-07-11 12:44 S10unattended-upgrades -> ../init.d/unattended-upgrades lrwxrwxrwx 1 root root 18 2011-07-11 12:44 S20sendsigs -> ../init.d/sendsigs lrwxrwxrwx 1 root root 17 2011-07-11 12:44 S30urandom -> ../init.d/urandom lrwxrwxrwx 1 root root 22 2011-07-11 12:44 S31umountnfs.sh -> ../init.d/umountnfs.sh lrwxrwxrwx 1 root root 20 2011-07-11 12:44 S35networking -> ../init.d/networking
Como se puede ver son todos enlaces simbólicos de scripts pero renombrados con la siguiente nomenclatura:
S[prioridad][nombre script] K[prioridad][nombre script]
Donde la S significa el start de demonio, K el kill y la prioridad es un numero de 00 a 99 para decir en que orden se van a ejecutar(puede haber demonios con la misma prioridad).
Ahora para crear los enlaces simbólicos debemos hacerlo en los runlevels adecuados. Para iniciar en el runlevel 5 (multiusuario gráfico) y 3 (multiusuario) y para pararlo en el runlevel 6 (reinicio) y 0 (apagado). Lo hacemos con el comando ln de la siguiente manera:
$ ln -s /etc/init.d/miscript /etc/rc5.d/S30miScript $ ln -s /etc/init.d/miscript /etc/rc3.d/S30miScript $ ln -s /etc/init.d/miscript /etc/rc6.d/K05miScript $ ln -s /etc/init.d/miscript /etc/rc0.d/K05miScript
Con esto alcanzaría para para levantar de modo automático el demonio.
- Automáticamente
sudo update-rc.d jboss defaultsSi vemos en la ayuda del update-rc.d vemos que tenemos también la posibilidad de especificarle la prioridad.
Con esto ya tenemos nuestro demonio y si queremos lo podemos iniciar con start.