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. [转]SpringMVC中使用Interceptor拦截器

    SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...

  2. 安装 Express

    首先假定你已经安装了 Node.js,接下来为你的应用创建一个目录,然后进入此目录并将其作为当前工作目录. $ mkdir myapp $ cd myapp 通过 npm init 命令为你的应用创建 ...

  3. 《Java Concurrency》读书笔记,使用JDK并发包构建程序

    1. java.util.concurrent概述 JDK5.0以后的版本都引入了高级并发特性,大多数的特性在java.util.concurrent包中,是专门用于多线并发编程的,充分利用了现代多处 ...

  4. [nginx]编译安装及安全优化

    nginx配置-最后整理版 nginx_upstream_check_module nginx-module-vts nginx打补丁 nginx编译安装 - 下载 cd /usr/local/src ...

  5. 深入理解Linux内核-回收页框

    Linux 系统在为用户态进程和内核分配动态内存的时候,所作的检查是马马虎虎的对内核使用的许多磁盘高速缓存和内存高速缓存大小也同样不作限制. 页框回收算法(PFRA):1.在所有内存使用完之前,就必须 ...

  6. HTML5学习笔记(二十三):DOM应用之动态加载脚本

    同步加载和执行JS的情况 在HTML页面的</body>表情之前添加的所有<script>标签,无论是直接嵌入JS代码还是引入外部js代码都是同步执行的,这里的同步执行指的是在 ...

  7. Java 清除指定目录文件夹下文件

    public static void clearFiles(String filePath){ File scFileDir = new File(filePath); File TrxFiles[] ...

  8. Linux/CentOS关闭图形界面(X-window)和启用图形界面命令

    1.在图像界面关闭x window:1.1 shell中运行 init 3  进入文本模式,同时会关闭相关的服务(Xserver 肯定关闭)1.2 Alt+Ctrl+F1~F6到字符界面,root登陆 ...

  9. C++11 delete和default

    Defaulted 函数 C++ 的类有四个特殊成员函数,它们分别是:默认构造函数.析构函数.拷贝构造函数以及拷贝赋值运算符.这些类的特殊成员函数负责创建.初始化.销毁,或者拷贝类的对象. 如果程序员 ...

  10. 缩放图片,解决bitmap 内存溢出out of memory的问题

    很多人在android开发中都遇到了生成bitmap时候内存溢出,也就是out of memory(OOM)的问题,网上对这样的问题的的解决说法不一.笔者作为一个初级开发者,在这里向大家提供一种比较实 ...