-
需求描述
创建一个可执行文件,启动定时任务,要求每隔五分钟检查Java进程是否挂掉,如果挂掉,后台拉起。 -
案例分享
-
创建.sh文件,并赋予其可执行权限
#创建文件
touch /bin/syscheck.sh
#编辑文件
vim /bin/syscheck.sh
然后按键i 输入内容 #!/bin/sh(必须放在第一行)
然后输入要定时查看的java进程
#!/bin/sh
################################check java server main porocess running######################################
#JDK environment
export JAVA_HOME=/usr/local/java/jdk1.8.0_251
export JRE_HOME=/usr/local/java/jdk1.8.0_251/jre
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$PATH/bin
#java process
sleep 10
ps -ef | grep "java -jar /usr/share/sw/java/fast-ov.war" | grep -v grep
if [ $? -ne 0 ]; then
nohup java -jar /usr/share/sw/java/fast-ov.war >> /tmp/javaovtest.log 2>&1 &
fi
#log>100M clear
#设置文件最大值为100M
maxsize=$((1024*1024*100))
#把这两个log文件存入到log_files数组中
log_files="/tmp/javaovtest.log /tmp/spring.log*"
#遍历这两个文件
for log_file in $log_files
do
# 判断是不是文件
if [ -f $log_file ]; then
# 使用ls -l 输出文件的信息,并取出第五列的字段(即文件大小,以k为单位)
size=`ls -l $log_file|awk '{print $5}'`
#如果size大于设置的100M
if [ $size -gt $maxsize ];then
#把log_file文件的最后51200k 放到/tmp/tmp.log
tail -c 51200k $log_file > /tmp/tmp.log
#然后把/tmp/tmp.log 放到log_file里面。相当于把旧的50M的log清除
cat /tmp/tmp.log > $log_file
#删除/tmp/tmp.log文件
rm /tmp/tmp.log
fi
fi
done
:wq 保存文件并退出。
#让配置生效
source /bin/syscheck.sh
- 赋予syscheck.sh可执行权限
chmod +x syscheck.sh
- 修改定时任务
#任意目录输入
crontab -e
键入o 对文件进行编辑,文件中输入(语法可自行搜索学习)
#每隔五分钟执行一次
*/5 * * * * /bin/syscheck.sh 2>&1 &
:wq保存退出。
退出后控制台回显crontab: installing new crontab表示添加完成。一般三分钟走任务才会调度成功。
注意:
如果是第一次使用定时任务的编辑器,可能无法使用:wq保存退出,而是出现了下图的情况。原因是系统选择了默认的编辑器。
先按ctrl + z退出。然后改用vim编辑器。
#输入命令
select-editor
输入3回车,可以再次使用:wq保存了。
自此,定时任务创建成功。