bash脚本: 监控Tomcat

本文介绍了一段用于监控Tomcat服务状态的bash脚本。该脚本通过检查指定端口是否被占用以及HTTP响应状态码来判断Tomcat运行是否正常,并在出现异常时发送邮件通知管理员。

 

 

#!/bin/bash
##############################################################################################################



##############################################################################################################
web_port=10000
fall=`netstat -nutlp |grep $web_port |wc -l`
status_code=200
web_code=`curl -I http://10.1.1.183:10000/  2> /dev/null |head -1 |cut -d " " -f 2`

if [ $fall -gt 0 ];then
	for i in `netstat -nutlp |grep $web_port | grep ":::*" | cut -d ":" -f 4`;do
		if [ $i -ne $web_port ];then
			mail_fall=1	
		else
			mail_fall=0
			break
		fi
	done	
	if [ $mail_fall -eq 1 ];then
		echo "10.1.1.183(tomcat server) tomcat port exceptio" |mail -s "tomcat port exceptio" lianshubash@sina.com	
	fi
else
	echo "10.1.1.183(tomcat server) tomcat port exceptio" |mail -s "tomcat port exceptio" lianshubash@sina.com
fi



if [ -z $web_code ];then
	echo "10.1.1.183(tomcat server) tomcat service exceptio" |mail -s "tomcat service exceptio" lianshubash@sina.com
else
	if [ $web_code -ne $status_code ];then
		echo "10.1.1.183(tomcat server) tomcat service exceptio" |mail -s "tomcat service exceptio" lianshubash@sina.com
	fi
fi

 

<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、付费专栏及课程。

余额充值