联系管理员

开通文章发布权限

扫码 添加微信
微信图片
电话:18888888888 QQ:

Shell记录之URL守望录

这段脚本主要用于监控指定URL的响应状态,并将每次请求的结果(HTTP状态码和请求耗时)记录到一个日志文件中。以下是一个实现每秒curl指定地址并将结果持续保存到日志的Shell脚本:

#!/bin/bash

# 检查参数是否正确
if [ $# -ne 1 ]; then
    echo "使用方法: $0 <需要测试的URL>"
    exit 1
fi

URL=$1
LOG_FILE="curl_$(date +%Y%m%d%H%M%S).log"

echo "开始监控 $URL"
echo "日志文件: $LOG_FILE"
echo "按 Ctrl+C 停止监控"

# 设置陷阱捕获Ctrl+C信号
trap 'echo -e "\n监控已停止"; exit' SIGINT

while true
do
    # 记录带时间戳的请求信息
    echo -e "\n[$(date +'%Y-%m-%d %T')] 请求结果:" >> $LOG_FILE
    # 执行curl命令(静默模式,显示HTTP状态码和耗时)
    curl -s -o /dev/null -w "状态码: %{http_code}\n耗时: %{time_total}秒\n" "$URL" >> $LOG_FILE 2>&1
    sleep 1
done

功能说明:

  1. 需要以URL作为参数运行脚本(例如:./monitor.sh http://example.com

  2. 自动生成带时间戳的日志文件(格式:curl_年月日时分秒.log)

  3. 每秒执行一次curl请求并记录:

    • 时间戳

    • HTTP状态码

    • 请求耗时

  4. 按 Ctrl+C 可优雅退出

增强功能:

  • 显示友好的开始/结束提示

  • 错误输出重定向到日志文件

  • 使用静默模式避免多余输出

  • 包含HTTP状态码和请求耗时等实用信息

日志文件示例:

[2023-10-20 15:30:45] 请求结果:
状态码: 200
耗时: 0.382

[2023-10-20 15:30:46] 请求结果:
状态码: 200
耗时: 0.401

如果需要记录完整的响应内容,可以将-o /dev/null改为-o -,并移除-w参数。如需调整监控频率,可以修改sleep的参数值(单位为秒)。

函数说明

  1. 参数检查
    脚本首先判断传入的参数个数是否等于1。如果不是,则会输出正确的使用方法并退出:

    if [ $# -ne 1 ]; then
        echo "使用方法: $0 <需要测试的URL>"
        exit 1
    fi

    作用:确保用户在执行脚本时传入了一个URL。

  2. 变量初始化
    将第一个参数赋值给变量 URL,并根据当前时间生成一个日志文件名:

    URL=$1
    LOG_FILE="curl_$(date +%Y%m%d%H%M%S).log"

    说明:日志文件名包含了年月日时分秒,方便区分不同监控会话的记录。

  3. 输出初始信息
    脚本输出监控开始的信息、日志文件名以及停止监控的提示:

    echo "开始监控 $URL"
    echo "日志文件: $LOG_FILE"
    echo "按 Ctrl+C 停止监控"

  4. 设置 Ctrl+C 信号捕获
    使用 trap 命令捕捉 SIGINT 信号(通常由 Ctrl+C 触发),以便在用户终止监控时输出提示信息并优雅退出:

    trap 'echo -e "\n监控已停止"; exit' SIGINT

  5. 无限循环监控
    进入一个无限循环,每隔1秒对指定URL发起一次请求:

    while true
    do
        # 记录带时间戳的请求信息
        echo -e "\n[$(date +'%Y-%m-%d %T')] 请求结果:" >> $LOG_FILE
        # 执行curl命令(静默模式,显示HTTP状态码和耗时)
        curl -s -o /dev/null -w "状态码: %{http_code}\n耗时: %{time_total}秒\n" "$URL" >> $LOG_FILE 2>&1
        sleep 1
    done

    详细解释

    • 记录时间戳:在每次请求前,将当前时间和“请求结果:”写入日志文件,方便后续查看每次请求的记录。

    • curl 命令

      • -s 表示静默模式,不显示进度信息。

      • -o /dev/null 表示将实际响应内容丢弃,只关心状态码和耗时。

      • -w 参数用于指定输出格式,其中 %{http_code} 输出 HTTP 状态码,%{time_total} 输出整个请求耗时。

    • sleep 1:每次请求之间暂停1秒,避免过于频繁的请求。

总结:

这段脚本通过不断发送 HTTP 请求,记录目标URL的状态码和响应时间,是一个简单而有效的监控工具。适合用来检测网站的可用性或网络延迟。如果有进一步的需求,可以考虑增加错误处理、更多的日志记录信息或者调整请求率等。

相关文章

neo4j部署手册
Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。
DataX和DataX-WEB 安装步骤
DataX 是阿里云 DataWorks数据集成 的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、 MaxCompute(ODPS)、Hologres、DRDS, databend 等各种异构数据源之间高效的数据同步功能。
K8S集群搭建手册(集群版)
kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
Apollo部署手册
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

评论

快捷导航

把好文章收藏到微信

打开微信,扫码查看

关闭

还没有账号?立即注册