shell实战之tomcat看门狗

1、脚本简介

  tomcat看门狗,在tomcat进程异常退出时会自动拉起tomcat进程并记录tomcat运行的日志。

1 函数说明:
2         log_info:打印日志的函数,入参为需要在日志中打印的msg
3         start_tom:启动tomcat的函数
4         check_tom_run:每隔30s检测tomcat进程是否存在
5         log_backup:备份tomcat监控日志
  1. check_tom_run每隔30s检测tomcat进程是否存在,log_info用于记录tomcat运行日志和操作日志。
  2. tomcat进程不存在时,执行start_tom去启动。
  3. 当日志文件大小大于指定大小时,则备份监控日志。

2、前提条件

  a、需要一台Linux主机

  b、主机上已部署tomcat

  访问地址:http://localhost:8080/ 如果出现以下界面,则说明tomcat已成功启动。

  

 

3、脚本代码

  脚本代码如下:

  1 #!/bin/bash
  2 #以下为多行注释
  3 : << !
  4 作用:tomcat watch dog,用于在tomcat进程退出后,自动拉起tomcat
  5 函数说明:
  6         log_info:打印日志的函数,入参为需要在日志中打印的msg
  7         start_tom:启动tomcat的函数
  8         check_tom_run:每隔10s检测tomcat进程是否存在
  9         log_backup:备份tomcat监控日志
 10 !
 11 
 12 curr_path=`pwd`
 13 #tomcat的安装路径
 14 tom_path=/home/stephen/InstallPath/apache-tomcat-8.5.39
 15 
 16 
 17 #定义打印日志的函数
 18 function log_info(){
 19 local curr_time=`date "+%Y-%m-%d %H:%M:%S"`
 20 log_file=${curr_path}/tom_running.log
 21 #判断日志文件是否存在
 22 if [ -e ${log_file} ]
 23    then
 24    #检测文件是否可写
 25    if [ -w ${log_file} ]
 26    then
 27        #若文件无写权限则使用chmod命令赋予权限
 28        chmod 770 ${log_file}
 29    fi
 30 else
 31    #若日志文件不存在则创建
 32    touch ${log_file}
 33 fi
 34 #写日志
 35 local info=$1
 36 echo "${curr_time}  `whoami` [Info] ${info}">>${log_file}
 37 }
 38 
 39 function start_tom(){
 40         log_info "Begin to start tomcat."
 41         cd ${tom_path}/bin
 42         log_info "cd ${tom_path}/bin"
 43         sh  startup.sh
 44         log_info "sh  startup.sh"
 45         #使用ps命令+awk获取tomcat的PID
 46         tom_pid=`ps -aux|grep apache-tomcat|grep -v grep|awk '{print $2}'`
 47         if  [ -z ${tom_pid} ]
 48             then
 49             sh startup.sh
 50         fi
 51         log_info "End to start tomcat."
 52 }
 53 
 54 #如果tomcat_pid为零,则说明tomcat进程不存在,需要去重启
 55 function check_tom_run()
 56 {
 57 tom_pid=`ps -aux|grep apache-tomcat|grep -v grep|awk '{print $2}'`
 58 echo ${tom_pid}
 59 if [ -z ${tom_pid} ]
 60 then
 61    echo "tomcat process is not running."
 62    #调用函数start_tom
 63    start_tom
 64    log_info "tomcat process is not running."
 65    #打印日志
 66 else
 67    echo "tomcat process is running"
 68    #打印日志
 69    log_info  "tomcat process is running"
 70 fi
 71 }
 72 #备份日志
 73 function log_backup(){
 74 cd ${curr_path}
 75 log_name=tom_running.log
 76 #获取当前日志的大小
 77 log_size=`ls -all|grep -v ${log_name}.|grep  ${log_name}|awk '{print $5}'`
 78 echo ${log_size}
 79 #当日志大于150MB时进行备份并清空旧的日志
 80 expect_size=`expr 150 \* 1024 \* 1024`
 81 echo ${expect_size}
 82 if [ ${log_size} -gt ${expect_size} ]
 83    then
 84    log_info "Begin to backup log."
 85    local ct=`date "+%Y-%m-%d-%H-%M-%S"`
 86    cp ${log_name} ${log_name}.${ct}
 87    log_info "cp ${log_name} ${log_name}.${ct}"
 88    #使用gzip命令压缩日志
 89    gzip -q  ${log_name}.${ct}  ${log_name}.${ct}.gz
 90    #清空旧日志
 91    cat  /dev/null > ${log_name}
 92    log_info "cat  /dev/null > ${log_name}"
 93 fi
 94 }
 95 
 96 #隔30s循环执行check_tom_1run
 97 while [ 1 ]
 98 do
 99   check_tom_run
100   log_backup
101   #休眠30s
102   sleep 30
103 done
View Code

 

4、运行结果

  4.1、运行脚本命令如下

1 chmod +x  /tomcatWatchDog.sh
#&表示脚本后台运行
2 ./tomcatWatchDog.sh &

  4.2、新打开一个窗口,杀掉tomcat进程

#获取tomcat的PID
ps -ef|grep  tomcat
#kill进程,PID为tomcat进程ID
kill -9 PID

  4.3、查看tom_running文件,从日志来看tomcat进程已自动拉起。

 1 2019-04-04 15:23:19  stephen [Info] tomcat process is running
 2 2019-04-04 15:23:20  stephen [Info] tomcat process is running
 3 2019-04-04 15:23:34  stephen [Info] tomcat process is running
 4 2019-04-04 15:24:04  stephen [Info] tomcat process is running
 5 2019-04-04 15:24:34  stephen [Info] Begin to start tomcat.
 6 2019-04-04 15:24:34  stephen [Info] cd /home/stephen/InstallPath/apache-tomcat-8.5.39/bin
 7 2019-04-04 15:24:34  stephen [Info] sh  startup.sh
 8 2019-04-04 15:24:34  stephen [Info] End to start tomcat.
 9 2019-04-04 15:24:34  stephen [Info] tomcat process is not running.
10 2019-04-04 15:25:04  stephen [Info] tomcat process is running
11 2019-04-04 15:25:34  stephen [Info] tomcat process is running

  4.4、当日志文件大小大于指定大小时,会备份日志文件。

1 -rwxr-xr-x  1 stephen stephen   2679 4月   4 14:57 tomcatWatchDog.sh*
2 -rwxrwx---  1 stephen stephen 573893 4月   4 15:28 tom_running.log*
3 -rwxr-x---  1 stephen stephen   7597 4月   4 12:43 tom_running.log.2019-04-04-12-43-53.g

 

转载于:https://www.cnblogs.com/webDepOfQWS/p/10655022.html

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

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

相关文章

tensorflow tf.train.batch()

tf.train.batch([example, label],batch_sizebatch_size, capacitycapacity) [example, label]表示样本和样本标签&#xff0c;这个可以是一个样本和一个样本标签&#xff0c;batch_size是返回的一个batch样本集的样本个数。capacity是队列中的容量。这主要是按顺序组合成一个b…

苹果6s上市时间_iPhone7的A10处理器还能战多长时间?2-3年不成问题!

iPhone 7采用A10 Fusion处理器&#xff0c;简称A10处理器&#xff0c;在2018年依然是处于高端处理器&#xff0c;再加上苹果自己的系统优化和资源调度&#xff0c;流畅度甚至超过其他安卓835机子。16年上市的iPhone7的A10还能再战多长时间&#xff1f;小编今天来分析一下。A10处…

tf.summary.FileWriter

ummary_waiter tf.summary.FileWriter("log",tf.get_default_graph()) log是事件文件所在的目录&#xff0c;这里是工程目录下的log目录。第二个参数是事件文件要记录的图&#xff0c;也就是tensorflow默认的图。

83998 连接服务器出错_服务端 TCP 连接的 TIME_WAIT 问题分析与解决

民工哥技术之路 写在开头&#xff0c;大概 4 年前&#xff0c;听到运维同学提到 TIME_WAIT 状态的 TCP 连接过多的问题&#xff0c;但是当时没有去细琢磨&#xff1b;最近又听人说起&#xff0c;是一个新手进行压测过程中&#xff0c;遇到的问题&#xff0c;因此&#xff0c;花…

SqlServer 时间格式化

select GETDATE() as 当前日期, DateName(year,GetDate()) as 年,DateName(month,GetDate()) as 月,DateName(day,GetDate()) as 日,DateName(dw,GetDate()) as 星期,DateName(week,GetDate()) as 周数,DateName(hour,GetDate()) as 时,DateName(minute,GetDate()) as 分,DateN…

[EBOOK]十大Java性能问题

有兴趣了解更多吗&#xff1f; 然后&#xff0c;您应该在此处下载相关的电子书。 Java中的大多数性能问题都可以归因于一些根本原因。 当然&#xff0c;偶尔会有一些奇怪的极端情况突然出现&#xff0c;并在应用程序中造成了严重破坏&#xff0c;但是在大多数情况下&#xff0…

请上传sku预览图后重新操作_拼多多商家版APP新增商品操作步骤

① 点击右下角“添加商品”按钮&#xff0c;进入创建商品页面&#xff1b;② 快速创建商品&#xff1a;目前手机版支持快速上传商品啦&#xff1a;仅通过上传商品标题、商品轮播图、商品分类、价格和库存&#xff0c;点击创建按钮&#xff0c;即可快速上传您的第一件店…

消息队列概述[幻灯片]

昨天我发表了一个演讲&#xff0c;涉及使用消息队列的所有方面。 我以前曾写过“您可能不需要消息队列” –现在的结论有些细微差别&#xff0c;但我仍然坚持简单性的观点。 演讲探讨了使用消息队列的各种好处和用例&#xff0c;并讨论了典型“消息队列代理”体系结构的替代方…

tf.reshape()

_image tf.reshape(x, [-1,28, 28, 1]) # -1表示任意数量的样本数,大小为28x28深度为一的张量 # 可以忽略(其实是用深度为28的,28x1的张量,来表示28x28深度为1的张量)

面向对象进阶-反射(二)重要知识点

# 面向对象的进阶# 其他常用模块# 作业 考试题# 网络编程 2天# ftp作业# class A:pass# class B(A):pass# a A()# print(isinstance(a,A))返回true&#xff0c;判断a是不是A的对象# print(issubclass(B,A))返回true&#xff0c;判断B是不是A的子类# print(issubclass(A,B))》…

异步过程的自动化测试

自从我开发了具有异步行为的服务器端应用程序以来已经有一段时间了&#xff0c;该行为还不是事件驱动的系统。 异步行为始终是设计和测试中一个有趣的挑战。 通常&#xff0c;异步行为不应该很难进行单元测试-毕竟&#xff0c;动作的行为不一定必须在时间上进行耦合&#xff08…

iphone以旧换新活动_iPhone第3轮降价背后:销售下滑库克甩锅给中国,国产手机崛起分食蛋糕...

排版 | 王科编辑 | 梁夜作者 | 吴晓宇来源 | 财经天下周刊(ID&#xff1a;cjtxzk)曾经吃掉手机行业9成利润的巨无霸公司苹果&#xff0c;不得不“自降身价”。3月5日之后&#xff0c;苏宁易购、京东、拼多多等多家电商平台纷纷宣布&#xff0c;再次对旗舰级iPhone XS系列产品降…

tf.placeholder()

# x 是手写图像的像素值,y是图像对应的标签 x tf.placeholder(tf.float32, [None,784])y tf.placeholder(tf.float32, [None,10])

Docker 搭建pxc集群 + haproxy + keepalived 高可用(二)

上一节我们有了两个分片的pxc集群&#xff0c;这一节我们接着安装haproxy和keepalived的实现集群的高可用 一、先下载haproxy的镜像 [rootlocalhost ~]# docker pull haproxy二、在host主机上写好配置文件&#xff0c;启动容器时候读取haproxy.cfg&#xff0c;vim /usr/local/d…

.net httpwebrequest 并发慢_go语言并发之MPG模型

请记住go并发的真理&#xff1a;Do not communicate by sharing memory; instead, share memory by communicating.不要以共享内存的方式来通信&#xff0c;相反&#xff0c;要通过通信来共享内存。go语言天生的并发大家都知道&#xff0c;可是go是如何实现轻松的构造上万的协程…

python中os操作文件及文件路径

python中os操作文件及文件路径实例汇总 1 . python获取文件上一级目录&#xff1a;取文件所在目录的上一级目录 os.path.abspath(os.path.join(os.path.dirname(settings.py),os.path.pardir)) 2. os.path.pardir是父目录&#xff0c;os.path.abspath是绝对路径 printos.path.…

JVM内存管理(一)--GC简介

GC策略解决了哪些问题&#xff1f; 既然是要进行自动GC&#xff0c;那必然会有相应的策略&#xff0c;而这些策略解决了哪些问题呢&#xff0c;粗略的来说&#xff0c;主要有以下几点。 1、哪些对象可以被回收。 2、何时回收这些对象。 3、采用什么样的方式回收。 GC策略采用何…

java 自定义注释_带有自定义注释的Java注释教程

java 自定义注释Java批注提供有关代码的信息&#xff0c;并且它们对其批注的代码没有直接影响。 在本教程中&#xff0c;我们将学习Java注释&#xff0c;如何编写自定义注释 &#xff0c;注释用法以及如何使用反射来解析注释 。 注释是在Java 1.5中引入的&#xff0c;现在它已…

vue标准时间改为时间戳_正确的济南初中寒假放假时间安排出来啦!家长速戳→...

原标题&#xff1a;正确的济南初中寒假放假时间安排出来啦&#xff01;家长速戳→今年济南初中寒假放假时间↓↓↓ 2021年1月30日-2月26日第一学期1 寒假安排义务教育阶段学校寒假开始时间为2021年1月30日(腊月十八)&#xff0c;寒假结束时间为2月26日(正月十五)。高中阶段学校…

给深度学习入门者的Python快速教程 - 基础篇

Python快速教程 - 基础篇 5.1 Python简介 本章将介绍Python的最基本语法&#xff0c;以及一些和深度学习还有计算机视觉最相关的基本使用。 5.1.1 Python简史 Python是一门解释型的高级编程语言&#xff0c;特点是简单明确。Python作者是荷兰人Guido van Rossum&#xff0c…