tomcat监控脚本

#!/bin/sh# func:自动监控tomcat脚本并且执行重启操作# 获取tomcat进程ID(其中[grep -w '.....']中的.....需要替换为实际部署的tomcat文件夹名,如下)
TomcatID=$(ps -ef |grep tomcat |grep -w '/usr/local/tomcat/apache-tomcat-8.5.31'|grep -v 'grep'|awk '{print $2}')
# 获取同一个tomcat重复启动个数
TomcatCount=$( ps -ef |grep tomcat |grep -w '/usr/local/tomcat_autoupdate'|grep -v 'grep'|awk '{print $2}' |wc -l)# tomcat启动程序(这里注意tomcat实际安装的路径)
StartTomcat=/usr/local/tomcat/apache-tomcat-8.5.31/bin/startup.sh
TomcatCache=/usr/local/tomcat/apache-tomcat-8.5.31/work#定义要监控的页面地址
WebUrl=http://localhost:8080/test2#日志输出
GetPageInfo=/tmp/tomcat_oip_back_visit.info
TomcatMonitorLog=/tmp/tomcat_oip_back_monitor.logMonitor()
{echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]"if [[ $TomcatCount -gt 1 ]];then #这里判断Tomcat进程是否有重复启动,有重复启动则全部干掉ps -ef |grep tomcat |grep -w '/usr/local/tomcat_autoupdate'|grep -v 'grep'|awk '{print $2}' | xargs kill -9echo "同一tomcat开启开启 $TomcatCount 个进程,统统kill掉"sleep 5elseif [ $TomcatID ];then #这里判断Tomcat进程是否存在echo "[info]当前tomcat进程ID为:$TomcatID,继续检测页面..."# 检测是否启动成功(成功的话页面会返回状态"200"),100秒无响应就不等待了TomcatServiceCode=$(curl -s -o $GetPageInfo -m 100 --connect-timeout 100 $WebUrl -w %{http_code})if [ $TomcatServiceCode -eq 200 ];thenecho "[info]页面返回码为$TomcatServiceCode,tomcat启动成功,测试页面正常"elseecho "[error]tomcat页面出错,请注意...状态码为$TomcatServiceCode,错误日志已输出到$GetPageInfo"echo "[error]页面访问出错,开始重启tomcat"kill -9 $TomcatID # 杀掉原tomcat进程sleep 5rm -rf $TomcatCache # 清理tomcat缓存$StartTomcatfielseecho "[error]tomcat进程不存在!tomcat开始自动重启..."echo "[info]$StartTomcat,请稍候..."rm -rf $TomcatCache$StartTomcatfifiecho "--------------------------"
}
Monitor>>$TomcatMonitorLog
ps  -e  //显示所有进程ps -f   //按树状显示grep tomcat  //只取含有tomcat的行grep -w 'apache-tomcat-5.5.23'        //-w选项搜索一个单词,并且避免搜索到词中的部分字串。 搜索含有apache-tomcat-5.5.23的行grep -v 'grep'    //去掉含有grep的行awk '{print $2}'  //用空格切分 取第二列ps -ef |grep tomcat |grep -w 'apache-tomcat-5.5.23'|grep -v 'grep'|awk '{print $2}'   //获取tomcat的进程id 但是仅仅是 tomcat进程存在是不够的,需要访问下  站点页面看看 是否访问正常  正常状态为200  通过curl curl -s -o $GetPageInfo -m 10 --connect-timeout 10 $WebUrl -w %{http_code}   //访问页面并保存页面内容返回状态码
-s --silent //静默模式,就是不显示错误和进度
-o $GetPageInfo //将文件保存到本地并命名为$GetPageInfo  
-m  //表示获取网页的最长时间(数据传输的最大允许时间)
-m 10 //表示如果10秒内无法完成获取网页源码的操作,则放弃
--connect-timeout //连接超时时间
--connect-timeout 10  //表示如果10秒内无法连接,则放弃
$WebUrl //就是我们要访问的页面路径变量
-w  //curl的-w参数我们可以自定义curl的输出,%{http_code}代表http状态码如果状态码为200则 tomcat正常,否则 kill  杀掉tomcat 进程, 访问tomcat的启动脚本 start.sh  启动tomcat

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

weblogic命令行操作

启动和停止子节点: [rootoud bin]# cd /sotware/oracle_ldap/Middleware/user_projects/domains/base_domain/bin/ [rootoud bin]# ./startManagedWebLogic.sh Server-0 http://192.168.63.129:7001 -Dweblogic.management.usernameweblogic -Dweblogic.management…

Ansible系列--Copy模块

copy模块 copy模块在ansible里的角色就是把ansible执行机器上的文件拷贝到远程节点上。 与fetch模块相反的操作 常用参数 参数名是否必须默认值选项说明srcno 用于定位ansible执行的机器上的文件,需要绝对路径。如果拷贝的是文件夹,那么文件夹会整体…

ANSIBLE--handlers的概念

handlers可以理解成另一种tasks,handlers是另一种’任务列表’,handlers中的任务会被tasks中的任务进行”调用”,但是,被”调用”并不意味着一定会执行,只有当tasks中的任务”真正执行”以后(真正的进行实际…

ansible--- tags

tags可以帮助我们对任务进行’打标签’的操作,当任务存在标签以后,我们就可以在执行playbook时,借助标签,指定执行哪些任务,或者指定不执行哪些任务。在实际的使用中,我们应该让tags的值能够见名知义。 当…

ANSIBLE---变量

注册变量 ansible的模块在运行之后,其实都会返回一些”返回值”,只是默认情况下,这些”返回值”并不会显示而已,我们可以把这些返回值写入到某个变量中,这样我们就能够通过引用对应的变量从而获取到这些返回值了&…

inux中限制用户进程CPU和内存占用率

#!/bin/sh PIDStop -bn 1 | grep "^ *[1-9]" | awk { if($9 > 50 || $10 > 25 && id -u $2 > 500) print $1} echo $PIDS for PID in $PIDS dorenice 10 $PIDecho "renice 10 $PID" done

按月拆分数据库表--oracle

生产有一张日志表,数据量很大,需要按月进行存储,存储过程如下: CREATE OR REPLACE PROCEDURE NEWLOG4_SUB_TABLE IStable_name1 VARCHAR2(50);create_table_sql VARCHAR2(4000);insert_data_sql VARC…

plsql定时器

Oralce中的任务有2种:Job和Dbms_job,两者的区别有: 1. jobs是oracle数据库的对象, dbms_jobs只是jobs对象的一个实例, 就像对于tables, emp和dept都是表的实例。 2. 创建方式也有…

PL/SQL批处理语句:BULK COLLECT 和 FORALL

PL/SQL程序中运行SQL语句是存在开销的,因为SQL语句是要提交给SQL引擎处理,这种在PL/SQL引擎和SQL引擎之间的控制转移叫做上下文却换,每次却换时,都有额外的开销 请看下图: 但是,FORALL和BULK COLLEC…

oracle 中DATETIME与TIMESTAMP区别

1.DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年。 2.DATETIME存储时间与时区无关,TIMESTAMP存储时间与时区有关,显示的值也依赖于时区。在mysql服务器,操作系统以及客户端连接都有时区的设置。 3.DAT…

PARALLEL(并行)

在Oracle中,PARALLEL(并行)方式最大化调用计算机资源来成倍提高数据分析效率。 1. 用途 强行启用并行度来执行当前SQL。这个在Oracle 9i之后的版本可以使用,之前的版本现在没有环境进行测试。也就是说,加…

Oracle数据库查询优化

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t w…

redis-full-check

https://github.com/alibaba/RedisFullCheck/releases redis-full-check是阿里云Redis&MongoDB团队开源的用于校验2个redis数据是否一致的工具。   redis-full-check通过全量对比源端和目的端的redis中的数据的方式来进行数据校验,其比较方式通过多轮次比较&a…

2021-06-22

服务器信息 [rootiZs7z01dz0z12dyttz9zn5Z cluster]# /app/redis/redis-3.2.1/src/redis-cli -c -h 10.252.120.9 -p 8003 10.252.120.9:8003> cluster nodes b1f543d646c5c97a70b0635439a44a72f8a143b1 10.252.120.10:8004 master - 0 1624349601417 7 connected 0-5460 1…

Docker目录挂载

Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定。 譬如我要启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录,可通过以下方式指定: # docker run -it -v /test:/soft centos /bin/ba…

Redis主从复制原理学习

Redis主从复制原理学习总结 - 运维笔记 和Mysql主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构&#xff…

redis数据恢复

公司线上一个项目数据存储采用MySQL,共分为10个库,分布在4台机器上,每个库数据量约为10G,各机器均采用RAID5加速磁盘访问; 当同时在线人数达高峰期(10w),DB磁盘IO压力巨大&#xff0…

Redis哨兵模式(sentinel)学习总结及部署记录(主从复制、读写分离、主从切换)

Redis的集群方案大致有三种:1)redis cluster集群方案;2)master/slave主从方案;3)哨兵模式来进行主从替换以及故障恢复。 一、sentinel哨兵模式介绍 Sentinel(哨兵)是用于监控redis集群中Master状态的工具&…

Redis之Redis内存模型

Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分。 我们使用Redis时,会接触Redis的5种对象类型(字符串、哈希、列表、集合、有序集合&…

MySQL 数据库误删除后的数据恢复操作说明

在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据。 线上数据库备份场景: 每周日执行一次全量备份,然后每天下午1点执行MySQLdump增量备份. 下面对这种备份方案…