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
功能说明:
需要以URL作为参数运行脚本(例如:
./monitor.sh http://example.com
)自动生成带时间戳的日志文件(格式:curl_年月日时分秒.log)
每秒执行一次curl请求并记录:
时间戳
HTTP状态码
请求耗时
按 Ctrl+C 可优雅退出
增强功能:
显示友好的开始/结束提示
错误输出重定向到日志文件
使用静默模式避免多余输出
包含HTTP状态码和请求耗时等实用信息
日志文件示例:
如果需要记录完整的响应内容,可以将-o /dev/null
改为-o -
,并移除-w
参数。如需调整监控频率,可以修改sleep的参数值(单位为秒)。
函数说明
参数检查
脚本首先判断传入的参数个数是否等于1。如果不是,则会输出正确的使用方法并退出:
作用:确保用户在执行脚本时传入了一个URL。变量初始化
将第一个参数赋值给变量URL
,并根据当前时间生成一个日志文件名:
说明:日志文件名包含了年月日时分秒,方便区分不同监控会话的记录。输出初始信息
脚本输出监控开始的信息、日志文件名以及停止监控的提示:设置 Ctrl+C 信号捕获
使用trap
命令捕捉SIGINT
信号(通常由 Ctrl+C 触发),以便在用户终止监控时输出提示信息并优雅退出:无限循环监控
进入一个无限循环,每隔1秒对指定URL发起一次请求:
详细解释:记录时间戳:在每次请求前,将当前时间和“请求结果:”写入日志文件,方便后续查看每次请求的记录。
curl 命令:
-s
表示静默模式,不显示进度信息。-o /dev/null
表示将实际响应内容丢弃,只关心状态码和耗时。-w
参数用于指定输出格式,其中%{http_code}
输出 HTTP 状态码,%{time_total}
输出整个请求耗时。
sleep 1:每次请求之间暂停1秒,避免过于频繁的请求。
总结:
这段脚本通过不断发送 HTTP 请求,记录目标URL的状态码和响应时间,是一个简单而有效的监控工具。适合用来检测网站的可用性或网络延迟。如果有进一步的需求,可以考虑增加错误处理、更多的日志记录信息或者调整请求率等。
评论