bash - 在 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=$1
CHECKURL=$(wget -S -t 1 --timeout=600 --spider https://${TARGET} --no-check-certificate 2>&1 | awk '/HTTP\// {print $2}')
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="$1"
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=$0 } 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
推荐阅读
- c# - 秒表说 <1ms 但每秒只有 50 次执行
- laravel - 在 voyager 管理面板中如何解决目录分隔符问题
- javascript - 基本的反应可选快速示例不起作用
- c - snd_pcm_hw_params_alloca() 和 snd_pcm_hw_params_malloc() 有什么区别?
- reactjs - React:在本地化文本中插入换行符
- c# - Swagger 2.0 不支持:路径“api/Client”和方法“GET”的多个操作
- google-cloud-platform - 来自某些 GCP 区域的错误跟踪路由
- bash - Lando:环境变量的执行错误
- flutter - 不能在英雄中放墨水瓶
- android - android.widget.LinearLayout$LayoutParams 不能转换为 android.support.constraint.ConstraintLayout$LayoutParams