linux通过定时任务定时关闭和重启java程序

   最近,有一个生产服务器每到早上6.10分的时候总会出现大量的云盘读操作,导致有一个java程序挂机。

在这里插入图片描述
初步分析此时云盘大量的读操作并不一定是挂机程序导致的(因为有可能是此时读操作,导致了java程序挂掉)。为了验证此想法,就需要在每天早上5:30关闭此程序,在6:30时在重启此程序。
先写一个关闭java程序的脚本,新建一个txt文档,重命名为stop.sh

#!/bin/bash
export JAVA_HOME=/usr/java/jdk-9.0.4
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH

echo "process is runing 1"
#启动并监视
PROCESS=`jps -l | grep 'iot-xxl-job-admin' | awk 'NR == 1' | awk '{print $1}'`
echo "process is runing $PROCESS"
if [ $PROCESS ];
then
	echo "process is runing"
	kill -9 $PROCESS
fi

iot-xxl-job-admin为自己的应用程序名,同样创建一个新的txt文档,重命名为start.sh

#!/bin/bash
export JAVA_HOME=/usr/java/jdk-9.0.4
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
echo "process is runing 1"
#启动并监视
IOT_PROCESS1=`jps -l | grep 'iot-xxl-job-admin' | awk 'NR == 1' | awk '{print $1}'`
echo "process is runing $IOT_PROCESS"
	if [ $IOT_PROCESS1 ];
		then
			echo "process is starting 2"
		else
			cd /usr/local/iot
			nohup java -Xms2048m -Xmx2048m -jar -Dspring.profiles.active=prod iot-xxl-job-admin.jar ./program > /dev/null 2>&1&
			echo "process is starting 3"
    fi



最上面的环境变量一定要带上,不然的话crontab执行时找不到环境导致执行不成功。自己本机的环境变量可以通过下面方法查看

vi /etc/profile

在这里插入图片描述
下面通过corntab执行脚本
首先,查看crontab服务的状态:

service crond status

在这里插入图片描述
如果没有安装crontab,执行下面的安装步骤

yum install contabs  #通过yum安装
systemctl enable crond  #设置开机启动
systemctl start crond   #启动

其次,将定时任务文件放到特定目录我的在/usr/etc下,然后编辑定时任务:

crontab -e  #该命令==  vim /etc/crontab

在文件最上方增加

30 5 * * * flock -xn sh /usr/etc/stopJava.sh
30 6 * * * flock -xn sh /usr/etc/startJava.sh

flock -xn代表资源枷锁,具体含义请自行查阅。为什么要加锁呢?不加锁,脚本会反复执行(我也没明白为什么?有知道的可以给我留言,共同学习!)
最后,重启crontab服务

service crond restart

查看定时任务日志

tail -f /var/log/cron

学习:
crontab命令参数

  1. -u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。
  2. file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
  3. -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
  4. -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
  5. -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
  6. -i:在删除用户的crontab文件时给确认提示。
    cron表达式
    第一位代表:秒 值范围:0-59 , - * /
    第二位代表:分 值范围: 0-59 , - * /
    第三位代表:小时 值范围:0-23 , - * /
    第四位代表:日期 值范围:1-31 , - * ? / L W C
    第五位代表:月份 值范围:1-12 或者 JAN-DEC , - * /
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Linux环境下,定期重启Java应用通常通过cron作业(cron job)来实现,这是一个定时任务管理系统。以下是设置cron任务的基本步骤: 1. **打开cron表编辑器**:首先,你需要通过`crontab -e`命令打开cron配置文件,这将启动一个文本编辑器(默认是vi或vim)。 2. **添加一个新的定时任务**:在打开的编辑器中,你会看到一系列以`*`表示的时间字段,按照时间顺序排列:分钟、小时、日期、月份和星期。每个字段都可以设定范围。例如,要每小时重启一次应用,你可以添加类似下面的行: ``` * * * * * /usr/bin/java -jar /path/to/your/app.jar & > /dev/null 2>&1 ``` 这一行的意思是,在每一分钟的开始(*)执行指定的命令。`/usr/bin/java`指定了Java解释器的位置,`-jar`用于执行JAR包中的应用,`&> /dev/null 2>&1`确保日志信息会被忽略并重定向到/dev/null。 3. **保存并退出编辑器**:完成后,记得保存并关闭编辑器。 4. **测试和查看计划的任务**:使用`crontab -l`命令查看当前的cron任务列表,确认已经添加的重启命令是否正确。 5. **启用cron服务**:如果你之前禁用了cron服务,现在需要启用它,可以通过`sudo service cron start`来启动。 6. **验证任务**:检查应用程序的日志,或者简单地观察其状态,确认定时任务是否按预期工作。 注意:你需要确保你的Java应用能够在命令行下启动,并且`cron`用户有足够的权限访问应用程序和相关资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开心编码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值