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

shell实战之tomcat看门狗相关推荐

  1. linux shell 看门狗,Linux 下如何使用看门狗

    Linux内核有集成WD的选项.将其使能后,系统里就会有watchdog的设备驱动:/dev/watchdog. 这样,在应用程序里只需打开这个设备使用即可: #include void main(v ...

  2. 《嵌入式 – GD32开发实战指南》第17章 看门狗

    开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK GD32 有两个看门狗,一个是独立看门狗,另外一个是窗口看门狗,独立看门狗号称宠物狗,窗口看 ...

  3. shell看门狗程序

    Shell 看门狗程序是一种常见的系统管理工具,其作用是在后台持续监测系统进程,如果发现某个进程出现故障或者意外停止,则会自动重新启动该进程. 通常情况下,Shell 看门狗程序会以守护进程的方式运行 ...

  4. 51单片机实战教程(22 看门狗)

    在要求高可靠性的系统中,为防止系统在异常情况下或者受到异常干扰导致MCU/CPU程序跑飞,系统长时间异常工作, 通常的做法就是引入看门狗.如果MCU/CPU不在规定时间内按要求访问看门狗,看门狗就强迫 ...

  5. STM32实战总结:HAL之看门狗

    在由单片机构成的微型计算机系统中,单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环:或者因为用户配置代码出现BUG,导致芯片无法正常工作.出于对单片机运行状态进行实时监测的考虑 ...

  6. MSP430F5529 DriverLib 库函数学习笔记(十四)看门狗定时器 (WDT)

    目录 硬知识 看门狗定时计数器 (WDTCNT) 看门狗模式 定时计数模式 看门狗定时器中断 时钟故障保护功能 低功耗模式下的看门狗操作 看门狗定时器控制寄存器 WDT_A API (机翻) 参数 上 ...

  7. redis 分布式锁 看门狗_分布式锁Redisson的使用,看门狗机制

    Redisson简介 Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid).它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式 ...

  8. Linux系统看门狗应用编程

    目录 看门狗应用编程介绍 打开设备 获取设备支持哪些功能:WDIOC_GETSUPPORT 获取/设置超时时间:WDIOC_GETTIMEOUT.WDIOC_SETTIMEOUT 开启/关闭看门狗:W ...

  9. 第四天:关看门狗、设置栈、控制icache、重定位、链接脚本

    1.汇编写启动代码:关看门狗 什么是看门狗? 看门狗(watch dog timer看门狗定时器),比如:家门口有一只狗,这个狗定时会饿(譬如两小时一饿),狗饿了就会胡乱咬人,人进进出出要想保证安全必 ...

最新文章

  1. CONTEST1001 题解
  2. JavaScript学习总结(二)数组和对象部分
  3. python编程头文件_python头文件怎么写
  4. asp.net textbox 控件如何清除缓存
  5. 跨站请求伪造攻击(CSRF)
  6. 字节输出流写多个字节的方法
  7. jQuery 学习笔记(三)——事件与应用
  8. 【Pytorch神经网络基础理论篇】 06 自动求导+导数与微分
  9. 效果直逼flash的Div+Css+Js菜单
  10. Javascript字符串长度返回错误的原因
  11. 判斷指定資料庫存取權
  12. SQL Server 聚合函数 (方差和标准差)
  13. 5w1H数据分析简单例子
  14. windows系统解决程序端口号被占用
  15. 应用分享:GIF压缩助手
  16. GitHub 开源神器 Bark模型,让文本转语音更简单
  17. Jugglefest
  18. 华为AC6605对接OpenPortal网络准入认证计费系统实现Mac快速认证+Portal认证
  19. ff新推荐的关闭办法
  20. [PMLR 2017] On calibration of modern neural networks

热门文章

  1. label标签/标记
  2. MacOS安装zsh插件zsh-autosuggestion(自动命令补全和建议)
  3. 浅析 Linux 初始化系统(系统服务管理和控制程序/init system) -- UpStart
  4. QPW 邀请日志表(tf_invite_log)
  5. IntelliJ IDEA for Mac 如何创建普通的Java项目_创建项目_新建项目
  6. 反射获取list泛型_Android 从浅到懂使用反射机制
  7. ftp主要完成与远程计算机的连接,2015计算机三级《网络技术》复习重点:远程登录服务和FTP服务...
  8. linux 提示符 异常,linux终端提示符异常 bash-4.1$
  9. java json 易用_Java中 Json的使用
  10. 安卓系统双屏异显_Android 双屏异显实现的三种方式