spring boot jar部署并设置定时任务清理日志文件

关于如何打包jar排除指定文件,参见上一篇:
https://blog.csdn.net/u011165335/article/details/103913023

1.如下项目文件的位置:
在这里插入图片描述
之前我是通过指令来部署的:
ps -aux | grep java --查询java应用
kill -s 9 24204 --停止应用
cd /tpsys/applications/platformUpload --切换应用目录
nohup java -jar platformUpload-0.01.jar >run.log & --启动
这样比较繁琐,改用文件操作

这里使用3个文件来管理jar:
1.start.sh  负责启动,注意这里是>> 追加,后面会说明为什么用>>
#!/bin/bash
echo platformUpload-0.01.jar start
nohup  java -jar platformUpload-0.01.jar  >>run.log &

2.stop.sh  负责关闭应用
#!/bin/bash
PID=$(ps -ef | grep platformUpload-0.01.jar | grep -v grep | awk '{ print $2 }')
if [ -z "$PID" ]
then
    echo Application is already stopped
else
    echo kill $PID
	echo platformUpload-0.01.jar stopped
    kill $PID
fi

3.run.sh   先关闭应用再启动应用,并且删除原来的所有日志文件

#!/bin/bash
echo stop application
source stop.sh
echo delete logs and run.log
rm -rf ./logs
rm -rf  run.log
echo start application
source start.sh
注意:
1.如果执行报错,记得授权:chmod u+x *.sh
2.如过sh文件是在window下面编写的,那么在linux下需要更改格式:否则报错:
-bash: ./stop.sh: /bin/bash^M: bad interpreter: No such file or directory
解决方法:
sed -i "s/\r//"  xx.sh
或者使用dos2unix指令插件

2.上面已经把三个.sh文件编写好了.这里还有一个问题,如果run.log日志过大怎么处理?
这里我们可以采用定时任务分割run.log;同时清空原run.log文件;
2.1如何清空日志:
使用cat /dev/null > run.log
具体说明如下:
a.nohup java -jar XXX.jar &
使用这种方式运行的程序日志默认会输出到当前目录下的nohup.out文件,使用ctrl+c中断或者关闭窗口都不会中断程序的执行。
b.nohup java -jar xxx.jar >run.log &
我这里重定向到了run.log文件;
这种方式应用重新启动后,运行日志会自动清空;
在使用cat /dev/null >run.log清空日志后,原来的文件空间还在;
即虽然将内容清空了,但是下一次日志再写入时,原来的空间还是被占用,打开文件查看,发现之前的被空替代(内容位置还在);
如图:里面的空白就是替换后的null
在这里插入图片描述这一点原因,具体可以看:
https://blog.csdn.net/l1161558158/article/details/79637502#commentsedit

c.nohup java -jar xxx.jar >>run.log & --追加形式(推荐的)
这种方式应用重新启动后,运行日志不会自动清空;
在使用cat /dev/null >run.log清空后,原来的文件空间全部清空;
这个才是我们需要的;这里 解释了上面的start.sh文件使用>>原因;

2.编写分割日志的splitRunLog.sh

#!/bin/bash
# Author: 
# Last Update: 2020年2月27日13:53:51
# Description: run.log 日志分割
 
this_path=$(cd `dirname $0`;pwd)   #根据脚本所在路径
current_date=`date -d "-1 day" "+%Y%m%d"`   #列出时间
cd $this_path
echo $this_path
echo $current_date  
 
do_split () {
    [ ! -d runlogs ] && mkdir -p runlogs
    split -b 20k -d -a 4 ./run.log   ./runlogs/run-${current_date}  #切分20k每块至runlogs文件中,格式为:run-xxxxxxxxxx
    if [ $? -eq 0 ];then
        echo "Split is finished!"
    else
        echo "Split is Failed!"
        exit 1
    fi
}
 
do_del_log() {
    find ./runlogs -type f -ctime +30 | xargs rm -rf #清理30天前创建的日志
    cat /dev/null > run.log #清空当前目录的run.log文件
}
 
if do_split ;then
    do_del_log
    echo "run.log is split Success"
else
    echo "run.log is split Failure"
    exit 2
fi
 
# crontab -e 添加定时任务:每周第一天的1点执行一次
#0 1 * * */1 /server/scripts/clearrun.sh &>/dev/null

#这里参考了:https://blog.51cto.com/ljohn/1909665

3.写入定时任务crontab,注意这里最好写绝对路径

打开crontab 文件,位置:
 crontab -e
 #添加如下指令,保存即可
 # 16:26分执行
 26 16 * * *  /tpsys/applications/platformUpload/splitRunLog.sh &>/dev/null    


#############################################################################
第一列 分钟: 1——59
第二列 小时: 0——23
第三列 日 : 1——31
第四列 月 : 1——12
第五列 星期: 星期0——6(0表示周天,1表示周一。。。)
第六列 要运行的任务命令(0表示键盘输入;1表示标准输出;2表示错误输出)默认值为1
前面五列有四种写法: 
* 表示第几分钟(小时/日/月/星期)执行一次 ;
*/n 表示每n分钟(小时/日/月/星期)执行一次;
T1-T2 表示从T1到T2分钟(小时/日/月/星期)要执行任务;
a,b,c 表示a,b,c分钟(小时/日/月/星期)分别执行一次; 
具体用法详见:
https://blog.csdn.net/qwerdfcv/article/details/82257821?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

在这里插入图片描述

分割的文件:注意分割后的文件时不带后缀的,具体查询split指令的 -a指令;
在这里插入图片描述

参考:https://blog.csdn.net/qiushi_1990/article/details/79915880

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值