在 wget 中处理超时

handling timeout in wget

我有一个 bash 脚本来检查 CHECKURL 变量是否有响应。 如果 url 无效或不存在,脚本会立即退出并回显一条消息 "NOT VALID URL"

我有一个问题,其中 url https://valid-url-sample.com 是有效的 url 但是我的 IP 在负载平衡器上被拒绝,因为它只响应来自特定 IP 的 443 请求。结果是脚本保持 运行 直到我需要 control+c。 我希望脚本能够处理这种情况并回显 "VALID BUT NOT REACHABLE",我还在 wget 命令上添加了超时,但仍然没有成功。关于如何处理这个问题有什么想法吗?

脚本

#!/bin/bash


TARGET=
CHECKURL=$(wget -S -t 1 --timeout=600 --spider https://${TARGET} --no-check-certificate 2>&1 | awk '/HTTP\// {print }')


if [[ ${CHECKURL} ]]; then
  echo "VALID URL"
else
  if [[ $? != 0 ]]; then
    echo "NOT A VALID URL"
  else
    echo "VALID BUT NOT REACHABLE"        
  fi
fi

示例脚本执行

[root@ip-192-69-69-69 ~]# ./script.sh google.com
VALID URL

您可能想使用这样的日志文件:.

#!/bin/bash

TARGET=""

if wget -S -t 1 --timeout=600 --spider https://"${TARGET}" --no-check-certificate > log.txt 2>&1; then
    echo "VALID URL"
else
    error="$(awk 'BEGIN { IGNORECASE=1 } /( failed| error| bad|unable | invalid| unrecognized)/ { err=[=10=] } END { if(match(err,/http:\/\/: Invalid host name/)) err=""; printf("%s",err) }' log.txt)"
    # Connection reset by peer, Connection timed out, Network is unreachable.
    if printf '%s' "$error" | grep -qiE '( peer| timed| unreachable)'; then
        echo "VALID BUT UNREACHABLE"
    # ERROR 403: Access denied/Forbidden.
    elif printf '%s' "$error" | grep -q ' 403'; then
        echo "FORBIDDEN"
    # Not Found.
    elif printf '%s' "$error" | grep -q ' 404'; then
        echo "NOT FOUND"
    # Fatal error.
    else
         echo "FATAL ERROR"
         echo "$error"
    fi
    exit 1 # Exit the script
fi

# Delete the temporary log file.
# rm -f log.txt