java实时程序在运行过程中偶尔出现异常信息中断的情况,通过shell脚本即可完成自启动。

以下为监控一个实时的java程序的shell脚本。

通过每10秒检查一次java程序的进程,来判断程序是否处于运行中。如果未发现程序,则执行程序的启动脚本。

对于启动过程中的状态信息,会通过钉钉机器人实时发送到监控群中,让维护人员了解到程序的异常。

在脚本中通过maxRetry来设置最大尝试的次数。

#!/bin/sh

#=============== java程序 begin ====================#
function callJavaProgram(){
nohup java -Djava.ext.dirs=lib com.Testjava >& &
}
#=============== java程序 end =======================# #=============== 发送钉钉的消息 begin ================#
# 注意: ${nowtime}对应的日期参数不能有空格
# 注意: ${programe}为执行的jar程序的主程序名
url='https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
programe=TestJava
server=192.168.0.101
content=''
logfile=testjava.log function sendDingtalk(){
java -Djava.ext.dirs=/home/hadoop/shell/robot/lib com.DingtalkRobot \
${} ${} ${} ${} ${}
}
#sendDingtalk ${url} ${programe} ${server} ${nowtime} ${content}
#=============== 发送钉钉的消息 end ==================# # 最大尝试次数
maxRetry=
# 尝试次数计数器
retryTimes= (
while true;
do
# 检测java程序执行的进程个数,如果小于1,则未启动
count=`ps -ef | grep ${programe} | grep -v grep|wc -l`
#echo '进程个数:'$count >> ${logfile}
nowtime=`date --date='0 days ago' "+%Y-%m-%d_%H:%M:%S"` if [ ${count} -lt ]; then retryTimes=$[$retryTimes+] content='检测到程序【'${programe}'】未启动,正在尝试启动......第'"${retryTimes}"'次'
echo ${nowtime} ${content} >> ${logfile}
sendDingtalk ${url} ${programe} ${server} ${nowtime} ${content} if [ $retryTimes -ge $maxRetry ]; then
content='检测到程序【'${programe}'】异常,尝试启动'"${maxRetry}"'次失败,程序退出,请手工解决'
echo ${content} >> ${logfile}
sendDingtalk ${url} ${programe} ${server} ${nowtime} ${content}
break
fi #============== 这里执行java程序 =========================#
callJavaProgram
#============== 这里执行java程序 =========================# else
if [ $retryTimes -gt ]; then
content='程序【'${programe}'】启动成功......第'"${retryTimes}"'次'
echo ${content} >> ${logfile}
sendDingtalk ${url} ${programe} ${server} ${nowtime} ${content}
else
echo ${nowtime} '程序【'${programe}'】......正在运行中' >> ${logfile}
fi
let retryTimes=
fi sleep done
) & >> shell.log

脚本启动后:

可以查看到钉钉群中实时监控信息:

程序启动成功后,提示以下信息:

shell+钉钉机器人完成java程序中断后自启动和实时监控的更多相关文章

  1. Java实现Android,iOS设备实时监控

    Java实现Android设备实时监控 设计思路: 第一,启动一个实时截图线程,负责实时截取Android设备屏幕,保存到本地路径. 第二,在JSP页面,定义一个img对象,实时更换img对象的src ...

  2. 运维利器:钉钉机器人脚本告警(Linux Shell 篇)

    写在前面的话 目前换了几家公司,且最近几家都是以钉钉作为公司 OA 聊天工具,总的来说还是很不错的.最近去了新公司,由于公司以前没有运维,所以监控,做自动化等方面都没有实施,恰逢这个机会把最近做的关于 ...

  3. shell操作钉钉机器人实现告警提醒

    我们知道,之前的运维告警多通过mail 等方式通知到相应的人员,难以实现随时随地的查看.随着手机APP的发展,很多告警开始发送到IM软件上去.目前比较常用的是发送到微信和钉钉上,今天我们将重点放在钉钉 ...

  4. 通知神器——java调用钉钉群自定义机器人

    创建群自定义机器人 在指定钉钉群(或者随便拉两个人建个群,然后把别人T出去)的群设置里选择 群机器人 -> 自定义,如图: 然后,添加机器人,设置名字,添加成功时如下图: 其中webhook非常 ...

  5. java接入钉钉机器人(带源码)

    前言 登录钉钉网页: https://im.dingtalk.com 登录说明文档地址,以备随时查询: https://ding-doc.dingtalk.com/doc#/serverapi2/qf ...

  6. Java项目中集成钉钉机器人推送消息提醒

    前言: 项目中有一个需求,当有新订单产生的时候,希望能够及时通知到业务相关人员进行处理,整体考虑了一下,选用了钉钉机器人提醒功能(公司内部主要也是使用钉钉进行通讯). 操作: 主要分为两部分进行处理: ...

  7. python监控服务器应用日志,推送钉钉机器人,实时关注日志异常

    生产环境多台服务器上部署了多个应用,日志出现报错时,无法及时反馈到开发人员.部署一个大型的运维监控应用,不但耗资源,而且配置也不简单. 简简单单写个python脚本来监控服务器日志就简单多了,废话不多 ...

  8. 钉钉自定义机器人配合SVN钩子事件进行消息的推送实践

    目前很多公司还是使用SVN(TortoiseSVN)进行版本控制,使用简单,适合管理一般项目.协同办公软件目前钉钉比较成熟,阿里也一直在宣传推广,这两年公司也在使用,主要用于信息的沟通,其它的绩效.考 ...

  9. Sentry快速开始并集成钉钉群机器人

    Sentry(直译为:哨兵)是一个开源错误跟踪服务,帮助开发人员实时监控和修复崩溃 Sentry本质上是一种帮助您实时监控和修复崩溃的服务 1.  安装客户端SDK 这里我们安装Java平台的SDK, ...

随机推荐

  1. “TableDetails”中列“IsPrimaryKey”的值为DBNull. Mysql EntityFramework

                                                                                Entity Framework连接MySQL时 ...

  2. css冻结列的效果

    <!DOCTYPE html><html lang="zh-cn"><head><meta charset="utf-8&quo ...

  3. Java 技术新手入门

    对于想学习Java的朋友 请参考IBM旗下站点:http://www.ibm.com/developerworks/cn/java/newto/index.html 我看了下对于新手有很好的指导,并且 ...

  4. [svc]tomcat目录结构/虚拟主机/nginx反向代理cache配置

    tomcat目录文件 /usr/local/tomcat/bin/catalina.sh stop sleep 3 /usr/local/tomcat/bin/catalina.sh start to ...

  5. OC中几种延时操作的比較

    1. sleepForTimeInterval,此函数会卡住当前线程,一般不用 <span style="font-size:18px;">[NSThread slee ...

  6. Socket网络编程--FTP客户端(2)(Windows)

    上一篇FTP客户端讲到如果制作一个简单的FTP客户端,功能实现了,但是后面我们发现了问题,就是FTP是使用明文进行操作的.对于普通情况来说就无所谓了.但有时候要安全的一点的话,就应该使用FTP的安全版 ...

  7. Sql Server 2008 清除日志

    --在SQL2008中清除日志就必须在简单模式下进行,等清除动作完毕再调回到完全模式. USE [master] GO ALTER DATABASE SSCDZ SET RECOVERY SIMPLE ...

  8. 【工具】Sublime + MarkdownEditing + OmniMarkupPreviewer使用起来

    Package Control的安装 下载安装Sublime Text3后,View -> Show Console调用Console. 在Console输入以下代码安装: import url ...

  9. MSSQL 的Top 和 MAX 效率测试

    环境: MSSQL 2008, 都在没有使用缓存的情况下面执行 表中有8W 条记录 分类1有134条记录 分别测试了3个语句 -- A select 字段1 from 表1 WHERE Ftype=' ...

  10. Asp.Net模拟post提交数据方法

    方法1: System.Net.WebClient WebClientObj = new System.Net.WebClient(); System.Collections.Specialized. ...