定时拨测指定url连通性
定时检测服务器到外网域名的连通性,这里脚本分享给大家,需要的自取
#!/bin/bash
# 定义要测试的 URL 列表
urls=("https://www.baidu.com" "https://www.google.com")
# 获取当前时间
current_time=$(date "+%Y-%m-%d %H:%M:%S")
# 定义日志文件夹路径
log_dir="/data/boce/logs"
# 如果日志文件夹不存在,则创建该文件夹
mkdir -p "$log_dir"
# 定义日志文件路径
log_file="$log_dir/url_check_$(date '+%Y-%m-%d').log"
# 循环测试每个 URL
for url in "${urls[@]}"; do
# 使用 curl 测试 URL 并获取详细错误信息,同时获取 HTTP 状态码
response=$(curl -s --head --request GET "$url" --connect-timeout 10 --max-time 15)
http_code=$(echo "$response" | head -n 1 | awk '{print $2}')
# 检查 curl 执行是否成功
if [ $? -eq 0 ]; then
# 如果连接成功,记录日志,包括状态码
if [[ "$http_code" =~ ^2[0-9]{2}$ || "$http_code" =~ ^3[0-9]{2}$ ]]; then
echo "$current_time - $url is reachable. HTTP Status: $http_code" >> "$log_file"
else
echo "$current_time - $url is unreachable. HTTP Status: $http_code" >> "$log_file"
fi
else
# 如果 curl 执行失败,捕获并记录错误信息
error_message=$(curl -s --head --request GET "$url" --connect-timeout 10 --max-time 15 2>&1)
# 判断错误信息并记录具体的错误原因
if [[ "$error_message" == *"Connection timed out"* ]]; then
echo "$current_time - $url is unreachable. Error: Timeout" >> "$log_file"
elif [[ "$error_message" == *"Could not resolve host"* ]]; then
echo "$current_time - $url is unreachable. Error: Could not resolve host" >> "$log_file"
elif [[ "$error_message" == *"Failed to connect to"* ]]; then
echo "$current_time - $url is unreachable. Error: Failed to connect" >> "$log_file"
elif [[ "$error_message" == *"Connection refused"* ]]; then
echo "$current_time - $url is unreachable. Error: Connection refused" >> "$log_file"
elif [[ "$error_message" == *"SSL certificate problem"* ]]; then
echo "$current_time - $url is unreachable. Error: SSL certificate problem" >> "$log_file"
else
echo "$current_time - $url is unreachable. Error: $error_message" >> "$log_file"
fi
fi
done
chmod +x /data/boce/boce.sh
crontab -e
* * * * * /data/boce/boce.sh
执行效果日志