Hay ocasiones en las que puede ser necesario hacer que un script se ejecute solo si una PC tiene conectividad. Después de detectar si el enlace está activo, una manera frecuente de comprobarlo es utilizando el comando ping
.
Variante simple:
(ping -q -c 1 algun_equipo_accesible > /dev/null 2>&1) && comando_a_ejecutar
Variante extendida:
#! /bin/sh ping -q -c 1 algun_equipo_accesible > /dev/null 2>&1 if [ $? -eq 0 ] ; then comando_a_ejecutar else echo -e "Imposible encontrar el equipo.\nProbablemene no hay conectividad.\n" fi
No obstante, en ocasiones no podemos utilizar el comando ping
porque el protocolo ICMP ha sido deshabilitado en nuestra PC o nuestro cortafuegos.
Que hacer entonces? Afortunadamente, existen maneras alternativas de realizar la comprobación, he aquí algunos ejemplos:
Una alternativa que podemos buscar al comando ping
es realizando una consulta DNS, que podemos ejecutar con el comando host
.
Variante simple:
(host -t a algun_equipo_accesible > /dev/null 2>&1) && comando_a_ejecutar
Variante extendida:
#! /bin/sh host -t a algun_equipo_accesible > /dev/null 2>&1 if [ $? -eq 0 ] ; then comando_a_ejecutar else echo -e "Imposible encontrar el equipo.\nProbablemene no hay conectividad.\n" fi
La comprobación mediante una consulta DNS es muy rápida, pero si algún equipo de la ruta tiene habilitada una cache para acelerar las consultas DNS, este método podría no funcionar.
Esta otra variante utiliza el comando wget
en un modo especial, que solo responde si el sitio es o no accesible. No es tan rápida como la consulta DNS, pero podría resultar más confiable.
Variante simple:
(wget -q --timeout=5 --spider www.algun_sitio_accesible.org) && comando_a_ejecutar
Variante extendida:
#! /bin/sh wget -q --timeout=5 --spider www.algun_sitio_accesible.org if [ $? -eq 0 ]; then comando_a_ejecutar else echo -e "Imposible encontrar el sitio.\nProbablemene no hay conectividad.\n" fi