2008-11-19

Crear el script para poder tener un programa como Demonio en el inicio o boot de Linux Ubuntu / Debian

Estuctura basica de un archivo /etc/init.d/mi_script_demonio

Codigo base:
  1. #!/bin/sh
  2. #El parámetro $1 contiene la acción a realizar (start, stop, etc)
  3. . /lib/lsb/init-functions
  4. case $1 in
  5. start)
  6. #Instrucciones para iniciar el script
  7. break;;
  8. stop)
  9. #Instrucciones para parar el script
  10. break;;
  11. restart)
  12. #Instrucciones para reiniciar el script
  13. break;;
  14. *)
  15. #Instrucciones por defecto
  16. esac;
  17. exit 0
Sencillo ¿verdad?.
Nuestro script, puede tener más opciones. Tantas como queramos.

Ahora vamos a rellenar las secciones del script con los códigos que queremos, en el caso del cliente de No-IP (fijaros que le he añadido la opción 'setup'):

Codigo:

  1. #!/bin/sh
  2. #El parámetro $1 contiene la acción a realizar (start, stop, etc)
  3. . /lib/lsb/init-functions
  4. case $1 in
  5. start)
  6. log_daemon_msg "Iniciando el cliente No-IP" "pepitodelospalotes@servidor.com"
  7. noip2 -M -c /var/lib/noip2/noip2.pepitodelospalotes.conf
  8. log_end_msg $?
  9. break;;
  10. stop)
  11. log_daemon_msg "Deteniendo el cliente No-IP" "pepitodelospalotes@servidor.com"
  12. noip2 -K $( echo $( ps ax | grep noip2 | grep pepitodelospalotes ) | cut -d' ' -f1 ) -c /var/lib/noip2/noip2.pepitodelospalotes.conf
  13. log_end_msg $?
  14. break;;
  15. restart)
  16. $0 stop
  17. $0 start
  18. break;;
  19. setup)
  20. log_daemon_msg "Configurando el cliente No-IP" "pepitodelospalotes@servidor.com"
  21. noip2 -Y -U 30 -u pepitodelospalotes@servidor.com -p pepito -C -c /var/lib/noip2/noip2.pepitodelospalotes.conf
  22. log_end_msg $?
  23. break;;
  24. *)
  25. echo "Uso: $0 {start|stop|restart|setup}"
  26. exit 2
  27. esac;
  28. exit 0
Por último, faltaría copiar este script a la carpeta /etc/init.d/ y darle permisos de ejecución:
$ sudo cp /etc/init.d/no-ip.sh
$ sudo chmod +x /etc/init.d/no-ip.sh

Provando el daemon
Para testear vuestro daemon, tan solo tenéis que usar los comandos de siempre, es decir:
$ sudo /etc/init.d/no-ip setup
$ sudo /etc/init.d/no-ip start
$ sudo /etc/init.d/no-ip restart
$ sudo /etc/init.d/no-ip stop


Con estos comandos, hemos iniciado el archivo de No-IP, hemos iniciado el daemon, lo hemos reiniciado y lo hemos parado. De esta manera, cada vez que tengáis que hacer operaciones con No-IP, podréis usar el comando que queráis (start, stop, restart,...).

Automatizando el daemon
Los sistemas GNU/Linux, tienen 6 runlevels que "indican" el estado de la máquina.
Por ejemplo, cuando iniciáis la máquina, automáticamente carga el runlevel 2 que contiene todos los comandos y daemons que tiene que iniciar. Cuando la queréis apagar, pasa al runlevel 6 (si no me equivoco) que contiene los comandos para terminar las aplicaciones. Cada runlevel contiene un conjunto de instrucciones que hacen que el sistema operativo se comporte de una forma u otra. A efectos prácticos, sería como las sesiones de los usuarios donde cada usuario, tiene su escritorio configurado de una manera, con sus programas, archivos, etc. Pues a modo de "estados del ordenador", encontramos los runlevels donde, por ejemplo, podríamos tener un runlevel que, en vez de iniciarnos el entorno gráfico, nos dejara el sistema en modo consola, podríamos escoger cargar o no unos drivers específicos, etc.


Para que nuestro daemon pueda iniciar de forma automática, tenemos que hacer que los runlevels lo carguen al iniciarse y eso se hace con este comando:
$ sudo update-rc.d no-ip.sh defaults 99 04

Y para que se pueda cargar desde cualquier runlevel:
sudo cp -P /etc/rc3.d/no-ip.sh /etc/rc2.d/

Listos! Con estos comandos ya iniciará el script automáticamente al iniciar la máquina (el comando start) y lo finalizará cuando se apague (el comando stop).

Fuente

No hay comentarios: