原文:https://blog.csdn.net/yuruixin_china/article/details/53634565

服务器环境:centos7.2 64位 tomcat8.5.6

tomcat 监控功能共需要两个脚本,如下: 
initMonitor.sh

#!/bin/sh
#初始化监控脚本相关变量
export tomcat_name=apache-tomcat-8.5.6
export tomcat_home=/usr/local/apache-tomcat-8.5.6
#测试接口访问地址
export webUrl=127.0.0.1:8080/yanglao/sysUserController/sysTest
#监控脚本日志路径
export tomcatMonitorLog=/tmp/yanglao/tomcatMonitor.log
export email_address=ruixin_yu@asdc.com.cn
#执行tomcat监控脚本#获取当前脚本所在目录
baseDirForScriptSelf=$(cd "$(dirname "$0")"; pwd)
$baseDirForScriptSelf/tomcatMonitor.sh
  • tomcatMonitor.sh
#!/bin/sh
# 获取tomcat进程ID  /usr/local/tomcat_ds_api
TomcatID=$(ps -ef |grep tomcat |grep -w $tomcat_name|grep -v 'grep'|awk '{print $2}')
# tomcat启动程序
StartTomcat=$tomcat_home/bin/startup.sh
# 日志输出
if [ -f $tomcatMonitorLog ]; thenecho "日志文件已创建"
elseecho "日志文件为创建,马上创建!"touch $tomcatMonitorLog
fi
#tomcatMonitorLog=/tmp/yanglao/tomcatMonitor.log
TryConnection(){echo $tomcat_name echo '$tomcat_name'TryTomcatID=$(ps -ef |grep tomcat |grep -w $tomcat_name|grep -v 'grep'|awk '{print $2}')  echo "[info]开始重新查看tomcat进程:$TryTomcatID...[$(date +'%F %H:%M:%S')]"  if [[ $TryTomcatID ]];thenecho "[info]当前tomcat进程ID为:$TryTomcatID,继续重新检测接口..."  # 检测是否启动成功(成功的话接口会返回状态"200")  TomcatServiceCodeTry=$(curl -s -m 10 --connect-timeout 10 $webUrl -w %{http_code}) if [[ $TomcatServiceCodeTry -eq 200 ]];then  echo "[info]系统接口返回码为$TomcatServiceCodeTry,tomcat重启成功,访问系统接口正常......"  echo "[error]发送告警关闭邮件"  echo "tomcat重启成功,访问系统接口正常 [$(date +'%F %H:%M:%S')]"|mail -s "智能养老项目告警关闭" $email_addresselsesleep 30TryConnectionfi  else sleep 30TryConnectionfi
}Monitor()
{  echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]"  if [[ $TomcatID ]];then # 这里判断TOMCAT进程是否存在  echo "[info]当前tomcat进程ID为:$TomcatID,继续检测系统接口..."  # 检测是否启动成功(成功的话接口会返回状态"200")  TomcatServiceCode=$(curl -s -m 10 --connect-timeout 10 $webUrl -w %{http_code}) if [[ $TomcatServiceCode -eq 200 ]];thenecho "[info]接口返回码为$TomcatServiceCode,tomcat运行正常,访问系统接口正常......"  else  echo "[error]访问系统接口出错,请注意......状态码为$TomcatServiceCode"  echo "[error]访问系统接口出错,开始重启tomcat"  echo "[error]发送告警开启邮件"  echo "由于访问系统接口出错,tomcat开始自动重启 [$(date +'%F %H:%M:%S')]"|mail -s "智能养老项目告警开启" $email_addresskill -9 $TomcatID  # 杀掉原tomcat进程  sleep 3  rm -rf $TomcatCache # 清理tomcat缓存  $StartTomcat  sleep 3mTryConnection #检查是否启动成功fi  else  echo "[error]tomcat进程不存在!tomcat开始自动重启..."  echo "[info]$StartTomcat,请稍候......"  echo "[error]发送告警开启邮件"  echo "由于tomcat进程不存在   tomcat开始自动重启 [$(date +'%F %H:%M:%S')]"|mail -s "智能养老项目告警开启" $email_addressrm -rf $TomcatCache  $StartTomcat  sleep 3mTryConnection #检查是否启动成功fi  echo "------------------------------"
}
Monitor>>$tomcatMonitorLog

前期准备:

  1. 安装crontab
  2. 配置邮件发送环境

脚本介绍:

  1. initMonitor.sh中可配置脚本中使用的变量,除参数配置外,此脚本中将调用tomcatMonitor.sh,此脚本再次调用的原因是export所设置的变量,仅在该shell以及它的子shell中有效。
  2. tomcatMonitor.sh为tomcat监控的业务逻辑脚本

使用说明: 
1.将initMonitor.sh,tomcatMonitor.sh两个脚本放入服务器同级目录下(如:/usr/bin/yanglao) 
2.如需配置脚本对应变量,请编辑initMonitor.sh,不需要更改的可跳过此步 
3.使用crontab设置定时执行initMonitor.sh: 
1)# crontab -e 
2 )插入/5 * * * /usr/bin/yanglao/initMonitor.sh 
3)#systemctl reload crond 
#systemctl restart crond 
经过以上操作,脚本即可运行,开始检测tomcat。

检测范围:tomcat进程关闭 , 系统接口无法访问 
告警动作:发送邮件至initMonitor.sh设置的邮件,并重启tomcat。 
重启后对tomcat重新进行检测,检测运行正常后,发送告警关闭邮件


分界线———–更于2017.08.07


由于最近开发的产品总是莫名其妙挂掉(我怀疑是我关了忘启动。。。),决定为该产品添加监控脚本。由于产品是直接面对普通用户的,为防止脚本因为莫名其妙的问题反复重启项目,故将项目启动部分去掉,改为只负责监控,不对项目执行任何操作。 
另外本次遇到的另一个蛋疼的问题是阿里云不允许通过smtp协议直接走25端口发送邮件,我又是个Linux菜鸡,实在没找到linux通过smtp协议发送邮件的方法,只能绕个路,通过java打jar包去发送smtps协议的邮件了。。。。送上代码:

initMonitor-wechat.sh

#!/bin/sh
#初始化监控脚本相关变量
export tomcat_name=/data/apache-tomcat-7.0.75
export tomcat_home=/data/apache-tomcat-7.0.75
#测试接口访问地址
#export webUrl=http://www.test.com/test
#监控脚本日志路径
export tomcatMonitorLog=/data/tomcatMonitor/log/tomcatMonitor-wechat.log
#export email_address=yuruixin@test.com
#执行tomcat监控脚本#获取当前脚本所在目录
baseDirForScriptSelf=$(cd "$(dirname "$0")"; pwd)
echo $baseDirForScriptSelf
$baseDirForScriptSelf/tomcatMonitor-wechat.sh

tomcatMonitor-wechat.sh

#!/bin/sh
# 日志输出
TomcatID=$(ps -ef |grep tomcat |grep -w $tomcat_name|grep -v 'grep'|awk '{print $2}')
if [ -f $tomcatMonitorLog ]; thenecho "日志文件已创建"
elseecho "日志文件为创建,马上创建!"touch $tomcatMonitorLog
fiMonitor()
{echo "[info]开始监控$tomcat_home...[$(date +'%F %H:%M:%S')]"  if [[ $TomcatID ]];then # 这里判断TOMCAT进程是否存在  echo "[info]当前$tomcat_home进程ID为:$TomcatID,继续检测系统接口..."  # 检测是否启动成功(成功的话接口会返回状态"200")  TomcatServiceCode=$(curl -s -m 10 --connect-timeout 10 http://wx.test.com/bxg/user/login -o /dev/null -w %{http_code})if [[ $TomcatServiceCode -eq 200 ]];thenecho "[info]接口返回码为$TomcatServiceCode,$tomcat_home.运行正常,访问系统接口正常......"  elseecho "[error]访问系统接口出错,请注意......状态码为$TomcatServiceCode"  echo "[error]发送告警开启邮件"  echo "访问系统接口出错[$(date +'%F %H:%M:%S')]"/data/jre/bin/java -jar /data/tomcatMonitor/lib/wechat.jarecho "访问系统接口出错[$(date +'%F %H:%M:%S')]"fielseecho "[error]$tomcat_home进程不存在!"  echo "[error]发送告警开启邮件"  echo "$tomcat_home进程不存在 [$(date +'%F %H:%M:%S')]"/data/jre/bin/java -jar /data/tomcatMonitor/lib/wechat.jarecho "$tomcat_home进程不存在 [$(date +'%F %H:%M:%S')]"fiecho "------------------------------"
}
Monitor>>$tomcatMonitorLog
  • 使用java通过smtps协议发送Email的代码

wechat.jar


import java.security.Security;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;public class SendEmail {public static boolean sendMailBySSL(String email) throws AddressException, MessagingException{Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";// Get a Properties objectProperties props = new Properties();props.setProperty("mail.smtp.host", "smtp.test.com");props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);props.setProperty("mail.smtp.socketFactory.fallback", "false");props.setProperty("mail.smtp.port", "465");props.setProperty("mail.smtp.socketFactory.port", "465");props.put("mail.smtp.auth", "true");final String username = "system@test.com";final String password = "test";Session session = Session.getDefaultInstance(props, new Authenticator(){protected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(username, password);}});// -- Create a new message --Message msg = new MimeMessage(session);// -- Set the FROM and TO fields --msg.setFrom(new InternetAddress("system@test.com"));msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(email,false));msg.setSubject("后台管理告警开启");SimpleDateFormat formatter;formatter = new SimpleDateFormat ("yyyy.MM.dd G 'at' hh:mm:ss z"); msg.setText("后台管理告警开启 ["+formatter.format(new Date())+"],请及时处理");msg.setSentDate(new Date());Transport.send(msg);System.out.println("Message sent.");return true;}public static void main(String[] args) throws AddressException, MessagingException {sendMailBySSL("yuruixin@test.com");}
}
  • 码块引用了mail-1.4.jar

检测tomcat 在CentOS 上的运行状态,发送邮件相关推荐

  1. java与tomcat,Centos上安装配置java和tomcat

    java java版本 1:配置环境变量 centos中配置环境变量稍有不同,要了解centos中如何配置环境变量首先需要理解一下几个简要的概念 * /etc/profile  和  /etc/pro ...

  2. 检测 tomcat 挂掉,发送邮件

    原文:https://blog.csdn.net/smile326/article/details/52293158 场景需求 tomcat偶尔并不是那么稳定,可能在长时间运行时突然就崩掉了,任何接口 ...

  3. 【qperf 】CentOS上网络带宽与延迟检测

    一.qperf 简介 qperf 可以用来测试两个节点之间的带宽(bandwidth)和延迟(latency),不仅仅可以用来测试 TCP/IP 协议的性能指标,还可以用来测试 RDMA 传输的指标. ...

  4. Java基础学习总结(52)——Liunx系统Centos上搭建Java开发环境

    一.安装jdk 1.查看Linux自带的JDK是否已安装 [plain] view plain copy  print? java –version 如果出现openjdk,最好还是先卸载掉openj ...

  5. 如何在Ubuntu和CentOS上启用Nginx的HTTP/2 协议支持

    HTTP/2 是 HTTP 网络协议的主要修订版本,其专注于 HTTP 协议的性能改进.HTTP/2 协议的目标是减少延迟,并且允许在 Web 浏览器和服务器之间的一个连接上并行发起多个请求,因此 W ...

  6. 怎样使windows上的javaWEB项目公布到Centos上

    首先在windows上把项目导入到myeclipse或者eclipse(JEE)版本号上. 然后经过调试,没有错误后. 点击项目,然后右键导出(Export...) 然后选择JEE的war格式,这个是 ...

  7. centos上安装supervisor来管理dotnetcore等应用程序

    supervisor 介绍: 这是一款用python编写的进程管理工具,可以守护他管理的所有进程,防止异常退出,以及提供一个可视化的web界面来手动管理,打开关闭重启各种应用,界面如下: 关于在cen ...

  8. 如何在 Ubuntu 和 CentOS 上启用 Nginx 的 HTTP/2 协议支持

    HTTP/2 是 HTTP 网络协议的主要修订版本,其专注于 HTTP 协议的性能改进.HTTP/2 协议的目标是减少延迟,并且允许在 Web 浏览器和服务器之间的一个连接上并行发起多个请求,因此 W ...

  9. CentOS上安装Docker及docker常用命令

    这里写目录标题 一.在CentOS上安装Docker Engine 1.Docker Engine安装 1.1 卸载以前的docker 1.2 安装方法 1.2.1 用repository方法安装 0 ...

最新文章

  1. PCL分割:Conditional Euclidean Clustering官方历程,在自己配置环境上调错
  2. WCF wsHttpBinding之Transport security Mode, clientCredentialType=”Basic”
  3. 马云:新型企业想要保持创新力 规模要在60人以内
  4. linux安装python库报错pywin32_完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误...
  5. C语言结构体描述BMP的文件格式
  6. flexbox布局_Flexbox vs Grid-如何构建最常见HTML布局
  7. java 分布式rpc框架_分布式RPC框架Apache Dubbo(一)
  8. 隐藏终端、暴露终端和RTS、CTS机制
  9. Linux从入门到放弃(1)教学视频推荐以及一些经验分享
  10. python刷课思路_江西干部网络学院-刷课思路
  11. Maven安装教程详解
  12. 关于短信猫死机的问题程序要如何解决
  13. rtthread iic读取M24C64的测试程序
  14. iOS帐号、证书之漫谈(三)—— 申请Apple ID
  15. uni-app设置背景图片,backgroundImage
  16. unzip和zip指令的使用方法
  17. 5种方法完美解决android软键盘挡住输入框方法详解
  18. python支持复数类型以下什么说法是错误的_python测试开发面试题1
  19. 今天终于把黄色书看完了
  20. JavaScript和css的交互.05

热门文章

  1. android 吧文字读出来,android学习之文字语音朗读
  2. Redis集群搭建失败 connected_slaves:0
  3. alpine linux 简介
  4. 用户体验导向的Android应用开发
  5. execjs 模块 call() 方法报错 AttributeError: ‘NoneType‘ object has no attribute ‘replace‘
  6. Qt创建停靠悬浮窗口
  7. 联想拯救者R7000P加硬盘
  8. 结对项目:SudokuGame
  9. 【推免攻略】五.2022年北交计算机学院夏令营、预推免保研经验
  10. (VS)c++调用matlab函数