Ací en aquest xicotet article deixe un script que llegeix un llistat d'urls i ens detecta si alguna web està fallant per un certificat SSL caducat o mal configurat, o per DNS.
Deixarem el llistat d'urls en el fitxer /root/comprovador_webs_urls.txt, i les escriurem així:
http://www.DOMINI1.es
http://www.DOMINI2.es
http://www.DOMINI3.es
...
El resultat que ens mostrarà serà el següent:

I ara, l'script és així de simple:
#!/usr/bin/env bash
set -u
URLS_FILE="${1:-/root/comprovador_webs_urls.txt}"
TIMEOUT="${TIMEOUT:-20}"
LOGFILE="${LOGFILE:-/var/log/comprovador_webs.log}"
timestamp() { date "+%Y-%m-%d %H:%M:%S"; }
mkdir -p "$(dirname "$LOGFILE")"
classify_curl_error() {
# https://curl.se/libcurl/c/libcurl-errors.html
case "$1" in
28) echo "TIMEOUT" ;;
6) echo "DNS_ERROR" ;;
7) echo "CONNECT_ERROR" ;;
35) echo "TLS_HANDSHAKE_ERROR" ;;
51) echo "CERT_VERIFY_ERROR" ;;
58) echo "LOCAL_CERT_PROBLEM" ;;
60)
# intentem distingir una mica amb el text
if echo "$2" | grep -qi "expired"; then
echo "SSL_CERT_EXPIRED"
elif echo "$2" | grep -qi "issuer is not recognized\|self signed\|unable to get local issuer"; then
echo "SSL_UNTRUSTED_ISSUER"
else
echo "SSL_CERT_INVALID"
fi
;;
*) echo "CURL_ERROR_$1" ;;
esac
}
while IFS= read -r url; do
[[ -z "$url" ]] && continue
[[ "$url" =~ ^[[:space:]]*# ]] && continue
errfile="$(mktemp)"
# -L segueix redireccions
# -o /dev/null no descarrega cos
# -w agafa codi HTTP final (si arriba a tindre’l)
http_code="$(
curl -sS -L --max-time "$TIMEOUT" -o /dev/null -w "%{http_code}" \
"$url" 2>"$errfile"
)"
rc=$?
err_msg="$(tr '\n' ' ' "$errfile" | sed -E 's/[[:space:]]+/ /g' | sed -E 's/[[:space:]]+$//')"
rm -f "$errfile"
if [[ $rc -ne 0 ]]; then
reason="$(classify_curl_error "$rc" "$err_msg")"
echo "$(timestamp) ALERTA: $url -> $reason (curl_rc=$rc, last_http=${http_code:-000})" | tee -a "$LOGFILE"
continue
fi
# OK per 2xx i 3xx; ALERTA per 4xx/5xx
if [[ "$http_code" =~ ^[45][0-9][0-9]$ ]]; then
echo "$(timestamp) ALERTA: $url -> HTTP $http_code" | tee -a "$LOGFILE"
else
echo "$(timestamp) OK: $url -> HTTP $http_code" >> "$LOGFILE"
fi
done "$URLS_FILE"
Abans d'executar, farem:
sed -i 's/\r$//' comprovador_urls.sh #per a normalitzar els caracters en mode UNIX
$chmod +x comprovador_urls.sh #per a donar-li permissos d'execució
L'he deixat a una Raspbian en una antiga Raspberry que no té sendmail i no puc fer enviaments per correu, només veure el resultat en la terminal o revisar el log que ens deixa a /var/log/comprovador_webs.log.





