Por distintos temas de arquitectura se planteó la necesidad de disponer de un servicio solamente si el enlace (a Internet) estaba activo, o sea que cuando el enlace estuviera caído el servicio debería estar apagado, o lo contrario.
Perfectamente podría haber creado un simple script que periódicamente (mediante cron) revisara el enlace y actuara como se requiere, y creo que habría solucionado en unas pocas líneas de bash, aunque luego con notificaciones por correo y registros podría ser algo más complejo.
Así que preferí encarar la tarea con monit, por ser un daemon especialmente pensado para monitoreo y acción.
Monit dispone de una funcionalidad de monitoreo de networking y la regla de monit quedó así:
check host ConexionInternet with address 10.0.2.3 if failed icmp type echo count 3 with timeout 3 seconds then exec "/usr/bin/service nginx stop" else if succeeded then exec "/usr/bin/service nginx start" alert monitor@gcorreo.com
y así quedan los registros, cuando baja y sube el servicio:
error : ICMP echo request for 10.0.2.3 1/3 failed -- Operation not permitted error : ICMP echo request for 10.0.2.3 2/3 failed -- Operation not permitted error : ICMP echo request for 10.0.2.3 3/3 failed -- Operation not permitted error : 'ConexionInternet' failed ICMP test [Echo Request] info : 'ConexionInternet' exec: /usr/bin/service info : 'ConexionInternet' succeeded ICMP test [Echo Request] info : 'ConexionInternet' exec: /usr/bin/service
Luego analizando vimos que el servicio era de capa aplicación, por que decidimos cambiar a monitoreo de conexión, quedando así:
check host ConexionInternet with address www.google.com if failed url http://www.google.com/ then exec "/etc/init.d/nginx stop" else if succeeded then exec "/etc/init.d/nginx start" alert monitor@gcorreo.com
Muy simple y confiable con la tarea delegada en el daemon monit.