当前位置: 首页 > news >正文

Linux使用定时任务监控java进程并拉起

需求描述:

设计一个脚本,通过Linux定时任务,每分钟执行一次,监控jar包进程是否存在,存在则不做动作,不存在则重新拉起jar包程序。

定时任务配置:

*/1 * * * * bash -x /root/myfile/jars/check_status_job.sh

脚本内容:

#!/bin/env bash#重新加载环境变量,解决java命令不存在的问题。
. /etc/profileval="springboot-8053.jar";ids=`ps -ef | grep "$val" | grep -v "grep" | awk '{print $2}'`;
echo $ids;if [[ -z $ids ]];thenecho	"进程不存在,已被重新拉起!";nohup java -jar  -Xmx256m  -Xms256m /root/myfile/jars/$val > /root/myfile/jars/default.out 2>&1 &nohup java -jar  -Xmx256m  -Xms256m /root/myfile/jarsxxxx/$val > /root/myfile/jarsxxxx/default.out 2>&1 &
elseecho	"进程存在,无须拉起!";
fi

通过以上配置,就可以实现需求。

遇到的问题及排查过程:

1、java命令不存在问题

在这里插入图片描述

排查:

首先,确认自己是root账号配置的cron,并且,执行了命令检查java是否存在
在这里插入图片描述
发现是存在的,java环境变量也是配置了的。
郁闷了,那为什么cron会无法识别到了?
于是,请教了大佬,排查过程如下:
首先,这个问题的本质是,cron执行shell脚本时,环境变量没加载,cron会清空环境。
通过一下命令排查:

cat ~/.bashrc
cat ~/.bash_profile
which java
grep -r jdk /etc/profile*

以上命令执行结果截图:
通过
从而确定,是cron没有读取到自己配置的java环境变量。
于是,在脚本最开始,加载一下环境变量,解决该问题。

#重新加载配置的环境变量
. /etc/profile

2、程序日志输出到default的问题。

输出到日志的方法有很多种,大致思路就是,nohup重定向到default文件。
类似命令:

nohup java -jar  -Xmx256m  -Xms256m /root/myfile/jars/springboot.jar > default.out 2>&1 &

但是,我的cron命令是:

bash -x /root/myfile/jars/check_status_job.sh

这样,可以看到shell脚本的运行步骤,方便排查脚本问题。
于是日志输出如下:
在这里插入图片描述
你会发现, > 重定向后的部分,没有构建到命令里。
这让初学者的我,傻眼了,我以为,日志打印的命令没构建全,那么,default肯定没法生成。
然后去脚本目录/root/myfile/jars/查看default.out文件,也确实没创建。
于是,我错误的认为,命令构建出错,导致default.out没能生成。

排查:

召唤大佬:

1default 默认生成在 /root 下
2、ls ~root		查看该目录下的文件有哪些
3、想要指定目录,就加绝对路径

在这里插入图片描述
发现,确实生成了default.out日志文件。
于是,重新构建我的nohup启动命令:

nohup java -jar  -Xmx256m  -Xms256m /root/myfile/jars/$val > /root/myfile/jarsxxxx/default.out 2>&1 &

这样,就可以在我指定的目录中生成日志文件了。
另外这里是覆盖重定向>,这样,每次重启后,default.out都是重新覆盖。从而,保证日志不会无限扩大。并且,shell脚本的日志,不会输出到default.out中。

补充:

另外一种日志输出的方法是,通过cron配置,把脚本日志全部输出到default.out里面
命令如下:

*/1 * * * * bash -x /root/myfile/jars/check_status_job.sh >> /root/myfile/jars/default.out 

这个办法不太好,会把shell脚本的日志和jar程序的日志都输出到default.out中,另外,这里只能用追加重定向>>,会导致日志文件无限扩大,不方便排查。

http://www.lryc.cn/news/9583.html

相关文章:

  • Win 10电脑摄像头提示错误代码0xa00f4244怎么办?
  • MFC消息机制
  • 全国计算机等级考试报名照片要求以及证件照制作教程
  • SQLSERVER 临时表和表变量到底有什么区别?
  • 技术生态异军突起,昇思MindSpore进入AI框架第一梯队
  • 审批流、工作流、业务流
  • 如何利用知识库加强内部管理?
  • 饕餮 NFT 作品集来袭!
  • C++中的内存分区、引用、函数
  • 关于angular表格total模板中一直为0
  • 多线程事务怎么回滚
  • 基于FPGA的时间数字转换(TDC)设计(五:基于Carry4的高精度TDC设计)
  • 【C++】二叉搜索树的实现(递归和非递归实现)
  • 春招来了,如何正确使用领英超高效招聘海外员工、挖掘人才?
  • Mysql中锁机制深入理解
  • 去中心化社交网络协议除了Nostr还有哪些?
  • 【FT2000/4+X100】调试记录
  • 我的Android启动优化—【黑白屏优化】
  • TongWeb8编码设置说明
  • 不同相机之间图片像素对应关系求解(单应性矩阵求解)
  • 远程管理时代,还得是智能化PDU才靠得住!
  • 通俗易懂理解——布隆过滤器
  • TypeScript 学习之类型推导
  • Android四大组件——Service详解
  • svg转png
  • 教你如何搭建人事OA-员工管理系统,demo可分享
  • C++递推基础知识
  • 【Python入门第十天】Python 布尔
  • WebDAV之π-Disk派盘+Piktures
  • Revit问题:Navisworks中导入的rvt模型角度不正确调整