服务健康检查脚本:linux-tutorial中的curl与wget使用

服务健康检查脚本:linux-tutorial中的curl与wget使用

【免费下载链接】linux-tutorial :penguin: Linux教程,主要内容:Linux 命令、Linux 系统运维、软件运维、精选常用Shell脚本 【免费下载链接】linux-tutorial 项目地址: https://gitcode.com/GitHub_Trending/lin/linux-tutorial

你是否遇到过服务宕机却浑然不觉?线上服务异常5分钟,可能导致数千用户流失。本文将带你用linux-tutorial项目中的curl与wget工具,打造专业级服务健康检查脚本,实现服务状态实时监控、异常自动告警,让你从此告别"后知后觉"的运维困境。

为什么需要健康检查脚本

在Linux服务器运维中,服务中断往往比想象中更频繁:内存溢出导致API无响应、磁盘满了让数据库工作异常、网络波动引发依赖服务超时...手动巡检不仅耗时,更可能错过黄金恢复时间。一个可靠的健康检查脚本能像"电子护士"一样,7×24小时守护你的服务。

项目中已有大量利用curl/wget实现自动化的案例:

这些脚本证明curl与wget不仅是下载工具,更是构建服务监控体系的基础组件。

curl与wget核心能力对比

功能特性curl(客户端URL工具)wget(网络下载工具)健康检查适用性
协议支持HTTP/HTTPS/FTP/SCP等20+协议主要支持HTTP/HTTPS/FTPcurl更全面
状态码获取-I参数直接返回HTTP头--server-response需解析输出curl更便捷
超时控制-m <秒数>精确控制-T <秒数>仅支持下载超时curl更专业
输出抑制-s静默模式不干扰日志-q仅减少输出不彻底curl更干净
安装情况主流Linux默认预装部分最小化系统需额外安装打平

项目实践:nginx-install.sh同时使用了curl -o下载源码包和wget -N更新配置文件,展示了两者协同工作的可能性。

基础健康检查脚本实现

1. 简易HTTP状态检查(curl版)

创建文件:codes/shell/系统管理/service-check-curl.sh

#!/bin/bash
# 服务健康检查脚本(curl版)
URL="http://localhost:8080/health"
TIMEOUT=5
LOG_FILE="/var/log/service-health.log"

# 获取状态码(-I只请求头,-s静默模式,-m超时控制)
STATUS=$(curl -I -s -m $TIMEOUT $URL -o /dev/null -w "%{http_code}")

# 记录检查结果
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Service status: $STATUS" >> $LOG_FILE

# 判断状态码(2xx/3xx表示正常)
if [[ $STATUS -ge 200 && $STATUS -lt 400 ]]; then
    echo "Service is healthy"
    exit 0
else
    echo "Service is unhealthy"
    exit 1
fi

2. 文件下载验证(wget版)

创建文件:codes/shell/系统管理/service-check-wget.sh

#!/bin/bash
# 服务健康检查脚本(wget版)
URL="http://localhost:8080/favicon.ico"
OUTPUT="/tmp/health-check.tmp"
TIMEOUT=10

# 下载文件(-q安静模式,-T超时设置,-O输出到文件)
wget -q -T $TIMEOUT $URL -O $OUTPUT

# 检查下载结果
if [ $? -eq 0 ] && [ -s $OUTPUT ]; then
    echo "Resource available"
    rm $OUTPUT
    exit 0
else
    echo "Resource unavailable"
    exit 1
fi

这两个脚本遵循项目中基本脚本的编码规范,使用了统一的变量命名风格和错误处理机制。

进阶监控方案

1. 多节点监控矩阵

#!/bin/bash
# 多节点健康检查脚本
declare -A SERVICES=(
    ["api-server"]="http://192.168.1.10:8080/health"
    ["db-proxy"]="http://192.168.1.11:8081/status"
    ["cache-layer"]="http://192.168.1.12:8082/ping"
)

for NAME in "${!SERVICES[@]}"; do
    URL=${SERVICES[$NAME]}
    # 使用curl的--connect-timeout参数仅限制连接阶段超时
    STATUS=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 3 $URL)
    if [[ $STATUS -eq 200 ]]; then
        echo "[$(date +'%H:%M')] $NAME is UP"
    else
        echo "[$(date +'%H:%M')] $NAME is DOWN (status: $STATUS)" | mail -s "服务告警" admin@example.com
    fi
done

这个脚本借鉴了systemctl命令的服务管理思想,将多个服务节点组织成键值对,实现批量监控和异常通知。

2. 定时执行与日志轮转

结合crontab定时任务实现周期监控:

# 编辑定时任务
crontab -e

# 添加以下配置(每5分钟执行一次检查)
*/5 * * * * /bin/bash /data/web/disk1/git_repo/GitHub_Trending/lin/linux-tutorial/codes/shell/系统管理/service-check-curl.sh >> /var/log/service-monitor.log 2>&1

# 设置日志轮转(创建/etc/logrotate.d/service-monitor)
cat > /etc/logrotate.d/service-monitor << 'EOF'
/var/log/service-monitor.log {
    daily
    rotate 7
    missingok
    notifempty
    compress
    delaycompress
    sharedscripts
}
EOF

这种配置确保监控日志不会无限增长,符合项目中logrotate最佳实践的设计理念。

企业级监控架构

健康检查脚本只是服务可靠性体系的第一层防护。在linux-tutorial项目中,你可以将这些脚本与以下组件结合,构建完整监控闭环:

mermaid

相关实现参考:

实战技巧与避坑指南

  1. 超时设置黄金法则

    # 生产环境建议设置为服务P99响应时间的3倍
    curl -m 10 https://api.example.com/health  # 比平均响应多留余量
    
  2. 避免"监控风暴": 当服务恢复时,脚本可能短时间内发送大量恢复通知。可通过创建状态缓存文件实现防抖:

    if [ "$STATUS" != "$(cat /tmp/last-status)" ]; then
        send_alert $STATUS  # 仅状态变化时发送通知
        echo $STATUS > /tmp/last-status
    fi
    
  3. 证书问题处理: 对于内部服务可临时跳过SSL验证(不建议生产环境):

    curl -k https://internal-service:8443/health  # 忽略证书校验
    
  4. 代理环境适配: 如服务器位于防火墙后,可通过环境变量配置代理:

    export https_proxy=http://proxy-server:3128
    wget https://api.example.com/health  # 自动使用代理
    

总结与扩展学习

通过本文你已掌握:

  • 使用curl/wget构建基础健康检查脚本
  • 多节点监控方案的设计与实现
  • 与crontab/logrotate集成的系统配置
  • 企业级监控架构的演进路径

下一步建议学习:

记住,最好的监控系统是你实际部署并持续优化的系统。从今天开始,用本文学到的知识为你的核心服务添加健康检查脚本,让linux-tutorial项目中的自动化理念真正保护你的业务连续性。

项目仓库地址:https://gitcode.com/GitHub_Trending/lin/linux-tutorial

【免费下载链接】linux-tutorial :penguin: Linux教程,主要内容:Linux 命令、Linux 系统运维、软件运维、精选常用Shell脚本 【免费下载链接】linux-tutorial 项目地址: https://gitcode.com/GitHub_Trending/lin/linux-tutorial

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值