在 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
我有一个 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