监控url是否正常脚本

本文介绍如何利用wget和curl命令行工具监控网站的可达性和状态码。通过编写shell脚本实现自动化检测,适用于网站健康检查场景。文章提供两个示例脚本,分别展示如何配置wget和curl来获取网站的状态。

1.用wget命令监控

wget命令

下载网页或文件

--spider

模拟爬虫的行为去访问网站,但不会下载网页

-q,    --quiet

安静的访问,禁止输出,类似-o /dev/null功能

-o,   --output-file=FILE

记录输出到文件

-T, --timeout=SECONDS

访问网站的超时时间

-t,   --tries=NUMBER

当网站异常时重试网站的次数

#!/bin/sh
function usage() {    
    echo $"usage:$0 url"
    exit 1
}
function check_url() { #<==检测URL函数。
    wget --spider -q -o /dev/null --tries=1 -T 5 $1 
   #<==采用wget返回值方法,这里的$1就是函数传参。
    #curl -s -o /dev/null $1 #<==采用curl返回值方法也是可以的。
    if [ $? -eq 0 ]
    then
        echo "$1 is yes."
        exit 0
    else
        echo "$1 is fail."
        exit 1
    fi
}
function main() {   #<==主函数。
     if [ $# -ne 1 ]   #<==如果传入的多个参数,则打印帮助函数,提示用户。
     then
         usage
     fi
     check_url $1     #<==接收函数的传参,即把结尾的$*传到这里。
}
main $*            #<==这里的$*就是把命令行接收的所有参数作为函数参数传给函数内部,常用手法。

sh *.sh www.baidu.com

2. 用url监控

curl命令

访问网站url

-I/--head

显示响应头信息

-m/--max-time <seconds>

访问超时的时间

-o/--output <file>

记录访问信息到文件

-s/--silent

沉默模式访问,就是不输出信息

-w/--write-out <format>

以固定特殊的格式输出,例如:%{http_code},输出状态码

#!/bin/bash
usage () {
  echo "Usage:$0 url"
  exit 1
}
checkurl () {
  local num=`curl -I -m 5 -s -w "%{http_code}\n" -o /dev/null|grep 200|wc -l`
  if [ $num -eq 1 ]
  then
    echo "$1 is ok"
  else
    echo "$1 is fail"
  fi
}
main () {
  if [ $# -ne 1 ]
  then
    usage
  fi
  checkurl $1
}
main $*
sh *.sh www.baidu.com
<think>首先,用户的问题是:“我想查找使用sh脚本监控tomcat URL是否正常的方法”,意思是“我想找到使用sh脚本监控Tomcat URL是否正常的方法”。 现在,用户提供了几个引用内容。我需要参考这些引用来回答。关键引用是: - 引用[1]: 展示了一个bash脚本,它使用curl检查一个URL(http://push.airad.com/error.jsp),如果响应不是200 OK,就重启Tomcat。 - 引用[2]: 关于Tomcat管理用户配置。 - 引用[3]: Tomcat性能调优。 - 引用[4]: 如何重启Tomcat。 - 引用[5]: 使用monit监控Tomcat服务,包括重启脚本。 用户的问题焦点是“监控tomcat URL是否正常”,所以引用[1]和[5]特别相关。 我的回答需要基于系统级指令: - 所有行内数学表达式用$...$(但这里可能不涉及数学表达式)。 - 独立公式用$$...$$(可能不适用)。 - LaTeX语法正确(但内容是脚本,可能不需要LaTeX)。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 此外,用户上次的问题和我的回答需要参考,但这是第一次交互,所以没有上次问题。我应该基于当前引用。 结构化回答: 1. **理解需求**:用户想用sh脚本监控Tomcat URL的可用性。这意味着检查一个URL是否返回正常响应(如HTTP 200),如果失败,采取行动如重启Tomcat。 2. **提取关键信息**:从引用[1],脚本使用curl检查URL状态。如果状态不是200 OK,它停止并启动Tomcat。 3. **构建回答**: - 解释方法:使用curl命令在脚本检查HTTP状态码。 - 提供示例脚本:基于引用[1]的脚本,修改以适应监控URL。 - 讨论如何集成:设置cron作业或使用监控工具(如引用[5]的monit)。 - 确保回答可靠:参考提供的引用。 4. **生成相关问题**:在回答后添加相关问题,如关于脚本优化、监控工具或其他相关主题。 示例脚本从引用[1]: ```bash #!/bin/bash n=`curl -I -s http://push.airad.com/error.jsp |grep "200 OK" |wc -l` if [ $n -ne 1 ] then source /etc/profile /usr/local/tomcat_push/bin/catalina.sh stop /usr/local/tomcat_push/bin/catalina.sh start fi ``` 这个脚本检查URL的HTTP头,如果"200 OK"出现次数不是1,就重启Tomcat。 修改为通用监控脚本: - 更改URL为需要监控URL。 - 改进检查逻辑:使用curl的选项直接获取状态码。 更好的方式使用`curl -s -o /dev/null -w "%{http_code}" http://example.com`来获取状态码。 例如: ```bash #!/bin/bash URL="http://example.com" # 替换为实际URL status_code=$(curl -s -o /dev/null -w "%{http_code}" $URL) if [ "$status_code" != "200" ]; then echo "URL is down! Restarting Tomcat..." # 重启命令,基于Tomcat安装路径 /path/to/tomcat/bin/shutdown.sh sleep 5 /path/to/tomcat/bin/startup.sh fi ``` 在回答中包含这个脚本。 回答结构: - 介绍方法:使用脚本定期运行curl检查HTTP状态码。 - 提供脚本示例:解释代码。 - 如何部署:建议使用cron或其他工具。 - 注意事项:如路径设置、权限等。 添加引用:在引用相关段落时添加标识,如[^1]。 相关问题生成: 1. 如何设置脚本定期运行(如cron)? 2. 有哪些其他工具可以监控Tomcat(如monit)? 3. 如何处理Tomcat重启失败的场景? 4. 如何优化监控脚本以减少误报? 最终回答用中文。 </think>### 使用sh脚本监控Tomcat URL是否正常的方法 要使用sh脚本监控Tomcat URL的可用性,核心思路是通过HTTP请求检查URL的响应状态码(如200表示正常)。如果检测到异常(如非200响应),则自动触发Tomcat重启或其他恢复操作。下面基于您提供的引用内容(特别是引用[1]和引用[5]),逐步解释实现方法。整个过程包括脚本编写、部署和优化,确保监控可靠。 #### 1. **脚本实现原理** - **HTTP状态码检查**:使用`curl`命令发送HTTP请求,获取URL的响应状态码。正常状态码为200,表示服务可用;其他代码(如404、500)表示异常。 - **重启逻辑**:如果检测失败,调用Tomcat的`shutdown.sh`和`startup.sh`脚本重启服务(需确保脚本路径正确)。 - **引用依据**:引用[1]中的脚本展示了基础框架,使用`curl -I`检查HTTP头中的"200 OK"计数;引用[5]则提供了更健壮的服务监控示例(如使用`monit`),但sh脚本可简化实现[^1][^5]。 #### 2. **完整sh脚本示例** 以下脚本基于引用[1]优化,改进点包括: - 直接获取HTTP状态码,避免使用`grep`和`wc`(更高效)。 - 添加日志输出和延时,防止重启冲突。 - 替换`URL`变量为您的实际监控URL(如Tomcat应用的health check端点)。 ```bash #!/bin/bash # 配置监控URL和Tomcat路径 URL="http://localhost:8080/your-app/health" # 替换为您的Tomcat应用URL TOMCAT_HOME="/usr/local/tomcat" # 替换为Tomcat安装路径 LOG_FILE="/var/log/tomcat_monitor.log" # 日志文件路径 # 获取HTTP状态码 status_code=$(curl -s -o /dev/null -w "%{http_code}" "$URL") # 检查状态码并处理异常 if [ "$status_code" -ne 200 ]; then echo "$(date): ERROR - URL $URL returned $status_code. Restarting Tomcat..." >> "$LOG_FILE" # 停止Tomcat(确保路径正确) "$TOMCAT_HOME/bin/shutdown.sh" >> "$LOG_FILE" 2>&1 sleep 5 # 等待5秒确保服务停止 # 启动Tomcat(引用[4]的重启逻辑) "$TOMCAT_HOME/bin/startup.sh" >> "$LOG_FILE" 2>&1 echo "$(date): Tomcat restarted." >> "$LOG_FILE" else echo "$(date): SUCCESS - URL $URL is healthy (status: $status_code)." >> "$LOG_FILE" fi ``` **关键参数说明**: - `curl -s -o /dev/null -w "%{http_code}"`:安静模式发送请求,只输出状态码。 - `>> "$LOG_FILE" 2>&1`:将命令输出重定向到日志文件,包括错误信息。 - **权限设置**:运行脚本前,确保用户有执行权限(`chmod +x script.sh`)和Tomcat脚本的访问权限(引用[2]提到必要时配置Tomcat用户角色)[^2]。 #### 3. **部署和运行方法** - **定时执行**:使用`cron`定期运行脚本(如每分钟监控一次)。 1. 编辑cron任务:`crontab -e` 2. 添加行:`* * * * * /path/to/your/script.sh` 3. 保存后脚本自动循环执行。 - **集成监控工具**:如需高级功能(如资源阈值),可结合引用[5]的`monit`工具,在失败时调用该脚本[^5]。 - **测试验证**: - 正常情况:手动访问URL确认返回200。 - 异常模拟:停止Tomcat(`shutdown.sh`),观察脚本是否触发重启。 #### 4. **注意事项和优化建议** - **路径配置**:确保`TOMCAT_HOME`与实际安装路径一致(引用[4]强调路径正确性)[^4]。 - **错误处理**:添加更严格的检查,如: - 在重启前检查Tomcat进程是否已停止(使用`ps aux | grep tomcat`)。 - 超时控制(引用[5]使用`timeout`参数)[^5]。 - **性能影响**:高频请求可能增加负载,建议监控间隔≥1分钟;对大流量应用,使用轻量级health check端点。 - **安全性**:避免监控URL暴露敏感信息(参考引用[2]的管理界面安全配置)[^2]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值