Durante mucho tiempo he venido arrastrando un problema de bloqueo del servicio imap en un sistema. Cuando ocurría eso, lo único que se podía hacer era reiniciar el servicio Inetd (si alguien que lea esto le ha ocurrido lo mismo, no estaría mal que postera como lo ha solucionado).La cuestión es que no he podido solucionarlo hasta ahora por medio de la configuración básica del programa o de mi sistema Linux en producción (una Debian Woody actualizada). Finalmente un buen amigo (gracias Damià) me comentó de una herramienta que se encargaba de monitorizar servicios, dar avisos y realizar acciones automáticamente. Esta herramienta se llama Monit [1].


[1] http://www.tildeslash.com/monit/

Monit, se trata de una herramienta de monitorización, que detecta cuando una servicio a caido y y puede ejecutar unos comandos cuando se da el evento de que el servicio no responde. En ese caso se puede configurar el comando a ejecutar para la parada y reinicio del servicio, el cual se ejecuta cuando se da esa condición. También se puede configurar cada cuanto tiempo se va a comprobar que el servicio estará disponible.

A continuación se muestra un ejemplo de configuración:

#
# monit control file
#
set daemon 120 # Poll at 2-minute intervals
set logfile syslog facility log_daemon
set httpd port 8900 and use address 192.168.x.1
allow localhost   # Allow localhost to connect
allow admin:monit # Allow Basic Auth

check process inetd with pidfile /var/run/inetd.pid
start program = "/etc/init.d/inetd start"
stop program = "/etc/init.d/inetd stop"
if failed host 192.168.69.1 port 143 protocol imap then restart  # imap
if 5 restarts within 5 cycles then timeout
alert foomanchu@foo.com

Esta configuración se puede guardar en un fichero llamado monitrc el cual debe estar alojado en /etc o puede estar alojado en cualquier directorio de usuario pero en el fichero .monitrc. Yo personalmente lo prefiero en /etc, eso si, con los permisos adecuados, por eso de las contraseña.

Se puede observar como está configurado el tiempo de comprobación a dos minutos, el fichero de log, como también tiene la posibiidad de consultarse on-line a través del servicio web que implementa, desde que IP se puede acceder de ese modo, el usuario y la contraseña, y lo más importante, el servicio y servicios a monitorizar.

En este caso, únicamente se monitoriza un servicio, aunque si se mira en la página del manual (ver sitio web), se ve como se pueden configurar más. Como se ve, se identificar el proceso a monitorizar, el pid y la ubicación del fichero que almacena el pid (identificador de proceso), los comandos de parada y arranque del servicio, la condición a comprobar (en este caso el fallo de conexión al puerto 143 con el protocolo imap), cuantos reintentos hará el antes de abandonar los reintentos y a que correo enviará una alerta, donde indicará que ha pasado, si ha podido arrancar, si ha habido algún problema o lo que sea.

El coreo que envía es tan simpático como este:

Restarted Service inetd

Date: Fri, 23 Jan 2004 14:35:55 +0100
Host: servidor

Your faithful employee,
monit

Event: 'inetd' failed, cannot open a connection to INET[192.168.x.1:143]

Lo de las alertas es realmente interesante, ya que se podrá configurar una alerta para que envíe un SMS, lo cual los que trabajamos en sistemas, y tal vez tengamos que hacer guardías, nos puede venir muy bien.