最近,有一个生产服务器每到早上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命令参数
- -u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。
- file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
- -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
- -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
- -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
- -i:在删除用户的crontab文件时给确认提示。
cron表达式
第一位代表:秒 值范围:0-59 , - * /
第二位代表:分 值范围: 0-59 , - * /
第三位代表:小时 值范围:0-23 , - * /
第四位代表:日期 值范围:1-31 , - * ? / L W C
第五位代表:月份 值范围:1-12 或者 JAN-DEC , - * /