Inicio automático de servicios, start, stop, restart, status.

Monitorización de servicios: start, stop, restart, status

En este tutorial os voy a mostrar como lanzar un aplicación en modo servicio con las siguientes características:

  • El servicio respondará a los mensajes: start, stop, restart, status.
  • El servicio se iniciará automáticamente cuando se inicie la máquina.
  • El servicio se iniciará automáticamente en caso de que sea detenido.

Como veis son muchas tareas las que vamos a realizar, asi que empezemos poco a poco.

Uno de los problemas que tenemos que resolver es saber cuando un servicio está obreciendo servicio a sus clientes. La mejor forma de saberlo es haciéndole una petición para ver si contexta.
Para este ejemplo, vamos a crear un Thread que será facilmente integrable con cualquier aplicación y que simplemente contexta una petición UDP sobre un puerto determinado retornando un “ok” al cliente, es decir algo parecido a un PING.

Código fuente que necesitamos integrar en nuestros servicios:
Código fuente de ejemplo de integración en un servicio:

La integración se puede observar en las líneas 19, 33 y 45.

Código fuente para consultar el estado del servicio:

A continuación vamos a hacer que el servicio responda a las peticiones: start, stop, restart, status.

En Unix, los servicios suelen responder a estos mensajes (al menos a start y stop). Para ellos cada servicio tiene un script en el directorio /etc/init.d.

Script de inicio, parada, reinicio, status. example_service.sh:.

(Lo debemos crear en el directorio /etc/init.d)

Reinicia el servicio de ejemplo. example_service_restart.sh:
Inicia el servicio de ejemplo para este tutorial. example_service_start.sh:
Detiene el servicio de ejemplo para este tutorial. example_service_stop.sh:
Consulta el estado del servicio de ejemplo para este tutorial. example_service_status.sh:

A continuación mostramos las comandos que deberíamos escribir para iniciar, detener, reiniciar y consultar el estado del servicio.

  • /etc/init.d/example_service start
  • /etc/init.d/example_service stop
  • /etc/init.d/example_service restart
  • /etc/init.d/example_service status

Monitorización del servicio para iniciarlo automáticamente en caso de que esté detenido.

Inicia el servicio en caso de que no responda a la consulta de STATUS example_service_monitor.sh:

(Observe las líneas 61 y 63 del cliente ServiceStatusTest)

Ahora tecleamos las dos líneas siguientes para monitorizar el estado del servicio

Vamos a apoyarnos en el cron (gestor de tarea programadas) para que monitorize el estado del servicio cada 5 segundos

  • (La siguiente línea abrirá un editor para editar el archivo crontab del usuario)
    crontab -e
  • (Debemos introducir esa linea para monitorizar el estado cada 5 segundos)
    */5 * * * * “sh /home/carlosgarcia/example_service_monitor.sh”

Ojo!! En algunas versiones de cron no funciona */5, pruebe con un 5.

Iniciando el servicio en el arranque de la máquina

Si deseamos que el servicio de ejemplo se inicie automáticamente cuando la máquina arranque debemos seguir los siguientes pasos:

  • Copiamos o movemos el archivo example_service en el directorio /etc/init.d (Si no lo habíamos hecho ya).
  • (Creamos un enlaze simbólico en el nivel de arranque 2.

    ln -s /etc/init.d/example_service /etc/rc2.d/S99example_service.

    Dentro del sistema operativo, existen varios niveles de arranque (de 0 a N) y dentro de cada nivel los servicios se inician según un orden (0-99).
    La S significa “START”.

    Para saber en que nivel arranca tu sistema, deberás consultar la propiedad initdefault del archivo /etc/inittab

Un saludo.

Carlos García. Autentia.