Me imagino que curl haría el trabajo. Escribí en un guión:
#!/bin/sh
function test {
res=`curl -I $1 | grep HTTP/1.1 | awk {'print $2'}`
if [ $res -ne 200 ]
then
echo "Error $res on $1"
fi
}
test mysite.com
test google.com
El problema aquí es que no importa lo que haga, no puedo hacer que deje de imprimir lo siguiente para stdout:
% Total % Received % Xferd Average Speed Time Time Time Current
Quiero que un cronjob ejecute este script y si escribe un mensaje así, cada vez que lo ejecute, recibiré un correo electrónico porque algo se ha impreso en stdout en cron, aunque el sitio puede estar bien.
¿Cómo obtengo el código de estado sin poner basura en stdout? Este código funciona, excepto el bono basura para el stdout que me impide usarlo.
usted quiere
Eso le dará el código HTTP_STATUS como la única salida.
fuente
Lo haría así para asegurarme de ser redirigido al host final y obtener la respuesta de él:
fuente
Use esto como su condición ...
fuente
como se señaló anteriormente, curl puede proporcionar de forma nativa la respuesta http:
El ejemplo 1 con
-s
silenciamos el progreso y-o /dev/null
nos deja descartar la respuesta, pero-w
es tu aliado aquí:Esto se puede simplificar aún más de forma nativa en curl preguntando por url_effective y redirect_url:
Ejemplo 2 vemos nuestra respuesta http inicial, dominios solicitados originales y redirigimos el servidor respondió con:
Sin embargo, si finalmente está buscando establecer una respuesta 200 incluso después de una redirección 301 o 302: entonces puede y soltar el mencionado 'redirect_url'
Ejemplo 3 agregamos
-L
que le indica a curl que persiga las redirecciones:fuente
some_user
un nombre real) o "Como otros han señalado"