本文目录导读:

我来介绍几种 Shell 脚本监控网站 HTTP 状态码的方法:
基础监控脚本
使用 curl 监控
#!/bin/bash
# 监控单个网站
URL="https://example.com"
HTTP_CODE=$(curl -o /dev/null -s -w "%{http_code}" $URL)
if [ $HTTP_CODE -eq 200 ]; then
echo "$(date) - $URL - 状态正常: $HTTP_CODE"
else
echo "$(date) - $URL - 状态异常: $HTTP_CODE"
fi
多网站批量监控
#!/bin/bash
# 定义要监控的网站列表
WEBSITES=(
"https://example1.com"
"https://example2.com"
"https://example3.com"
)
# 监控函数
check_website() {
local url=$1
local timeout=10
HTTP_CODE=$(curl -o /dev/null -s -w "%{http_code}" \
--connect-timeout $timeout \
--max-time $timeout \
$url)
echo "$(date '+%Y-%m-%d %H:%M:%S') - $url - HTTP状态码: $HTTP_CODE"
# 判断状态码
case $HTTP_CODE in
200|301|302)
return 0
;;
403|404|500|502|503)
return 1
;;
*)
return 2
;;
esac
}
# 主循环
for website in "${WEBSITES[@]}"; do
check_website $website
done
带有告警功能的监控脚本
#!/bin/bash
# 配置
URL="https://example.com"
THRESHOLD_CODE=400 # 告警阈值
ALERT_EMAIL="admin@example.com"
LOG_FILE="/var/log/website_monitor.log"
# 日志函数
log_message() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1"
}
# 发送告警
send_alert() {
local subject="网站监控告警 - $URL"
local message="时间: $(date '+%Y-%m-%d %H:%M:%S')
URL: $URL
状态码: $1
错误信息: $2"
echo "$message" | mail -s "$subject" $ALERT_EMAIL
log_message "告警已发送至 $ALERT_EMAIL"
}
# 监控主函数
monitor_website() {
local response_time
local http_code
# 获取HTTP状态码和响应时间
http_code=$(curl -o /dev/null -s -w "%{http_code}" \
--connect-timeout 10 \
--max-time 30 \
$URL 2>&1)
# 检查curl是否成功
if [ $? -ne 0 ]; then
log_message "无法访问 $URL"
send_alert "N/A" "无法连接到服务器"
return 1
fi
# 判断状态码是否异常
if [ $http_code -ge $THRESHOLD_CODE ] || [ $http_code -eq 0 ]; then
log_message "异常状态: $http_code"
send_alert $http_code "HTTP状态码异常"
return 1
else
log_message "正常: HTTP $http_code"
return 0
fi
}
# 执行监控
monitor_website
持续监控并记录日志
#!/bin/bash
# 配置
INTERVAL=60 # 监控间隔(秒)
SITES_FILE="websites.txt" # 网站列表文件
STATUS_LOG="monitor_status.log"
ERROR_LOG="monitor_errors.log"
# 确保日志文件存在
touch $STATUS_LOG $ERROR_LOG
# 监控函数
check_site_status() {
local url=$1
local site_name=$(echo $url | sed 's|https\?://||' | cut -d'/' -f1)
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
# 获取HTTP状态码和响应时间
local result=$(curl -o /dev/null -s -w "%{http_code}:%{time_total}" \
--connect-timeout 5 \
--max-time 10 \
$url 2>&1)
local http_code=$(echo $result | cut -d: -f1)
local response_time=$(echo $result | cut -d: -f2)
# 记录状态
echo "$timestamp,$site_name,$http_code,$response_time" >> $STATUS_LOG
# 检查异常
if [ $http_code -ge 400 ] || [ $http_code -eq 0 ]; then
echo "$timestamp,$url,$http_code,$response_time" >> $ERROR_LOG
echo "[ERROR] $url 返回状态码: $http_code"
else
echo "[OK] $url 返回状态码: $http_code (${response_time}s)"
fi
}
# 主循环
while true; do
clear
echo "=== 网站状态监控 ==="
echo "监控时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "========================================"
# 读取网站列表并检查
while IFS= read -r site || [ -n "$site" ]; do
# 跳过注释和空行
[[ $site =~ ^# ]] && continue
[[ -z $site ]] && continue
check_site_status "$site"
done < "$SITES_FILE"
echo "========================================"
echo "等待 ${INTERVAL} 秒后再次检查..."
echo "按 Ctrl+C 退出"
sleep $INTERVAL
done
增强版监控脚本(带更多功能)
#!/bin/bash
# 配置文件
CONFIG_FILE="monitor_config.conf"
# 默认配置
DEFAULT_INTERVAL=300
DEFAULT_TIMEOUT=10
DEFAULT_RETRY=3
DEFAULT_ALERT_THRESHOLD=400
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 加载配置文件
load_config() {
if [ -f "$CONFIG_FILE" ]; then
source "$CONFIG_FILE"
else
echo "使用默认配置"
fi
}
# 高级监控函数
advanced_monitor() {
local url=$1
local max_retry=${2:-$DEFAULT_RETRY}
local retry_count=0
while [ $retry_count -lt $max_retry ]; do
local result=$(curl -o /dev/null -s -w "%{http_code}:%{time_total}:%{size_download}:%{content_type}" \
--connect-timeout $DEFAULT_TIMEOUT \
--max-time $((DEFAULT_TIMEOUT * 2)) \
--location \
$url 2>&1)
local curl_exit_code=$?
local http_code=$(echo $result | cut -d: -f1)
local response_time=$(echo $result | cut -d: -f2)
local size=$(echo $result | cut -d: -f3)
local content_type=$(echo $result | cut -d: -f4)
if [ $curl_exit_code -eq 0 ] && [ $http_code -lt $DEFAULT_ALERT_THRESHOLD ]; then
echo -e "${GREEN}[OK]${NC} $url - HTTP:$http_code - Time:${response_time}s - Size:${size}bytes"
return 0
fi
retry_count=$((retry_count + 1))
if [ $retry_count -lt $max_retry ]; then
echo -e "${YELLOW}[RETRY]${NC} $url - 尝试 $retry_count/$max_retry"
sleep 2
fi
done
echo -e "${RED}[FAIL]${NC} $url - 所有重试都失败"
return 1
}
# 生成报告
generate_report() {
local report_file="monitor_report_$(date '+%Y%m%d_%H%M%S').txt"
{
echo "网站监控报告"
echo "生成时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "=========================================="
echo ""
# 从日志中分析
if [ -f "$STATUS_LOG" ]; then
echo "最近10条状态记录:"
tail -10 $STATUS_LOG
echo ""
echo "异常统计:"
awk -F',' '$3>=400 || $3==0 {count[$2]++} END {for (site in count) print site, count[site] "次异常"}' $STATUS_LOG
fi
} > "$report_file"
echo "报告已生成: $report_file"
}
# 主函数
main() {
load_config
case "${1:-check}" in
check)
# 单次检查
if [ -z "$2" ]; then
echo "请指定要检查的URL"
exit 1
fi
advanced_monitor "$2"
;;
monitor)
# 持续监控
while true; do
clear
echo "=== 持续监控模式 ==="
echo "$(date '+%Y-%m-%d %H:%M:%S')"
echo "----------------------------------------"
while IFS= read -r site; do
[[ $site =~ ^# ]] && continue
[[ -z $site ]] && continue
advanced_monitor "$site"
done < "${2:-websites.txt}"
echo "----------------------------------------"
echo "等待 ${INTERVAL:-$DEFAULT_INTERVAL} 秒..."
sleep ${INTERVAL:-$DEFAULT_INTERVAL}
done
;;
report)
# 生成报告
generate_report
;;
help|*)
echo "使用方法:"
echo " $0 check <URL> - 单次检查指定URL"
echo " $0 monitor [file] - 持续监控,默认读取websites.txt"
echo " $0 report - 生成监控报告"
echo " $0 help - 显示帮助信息"
;;
esac
}
# 执行
main "$@"
使用示例
网站列表文件 (websites.txt)
# 要监控的网站列表
https://www.google.com
https://www.github.com
https://example.com
配置文件 (monitor_config.conf)
# 监控配置 INTERVAL=60 TIMEOUT=10 RETRY=3 ALERT_THRESHOLD=400 ALERT_EMAIL="admin@example.com"
使用建议
-
定时执行:使用 crontab 设置定时任务
# 每5分钟执行一次 */5 * * * * /path/to/monitor.sh check https://example.com
-
日志管理:定期清理和轮转日志文件
-
告警机制:可以集成邮件、短信或钉钉通知
-
性能考虑:设置合理的超时和重试次数
这些脚本可以根据实际需求进行调整和扩展。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播