实现定时备份与清空日志文件

需求:因为公司项目的日志输出在nohup.out中,一段时间后nohup.out文件会过大,导致日志无法写入,导致程序报错。

思路:采用定时器的方式,写一个定时器去执行linux服务器上的命令行,再通过命令行备份原有的nohup.out ,并修改为具体的日期,以便后续排查日志,并将原先的nohup.out清空,以便新的日志可以正常存入。

主启动类 :

//需要加一个注解开启定时器

@SpringBootApplication
 
//需要加一个注解开启定时器
@EnableScheduling
public class SmartBootApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(SmartBootApplication.class, args);
    }
}

 //要把定时器的类作为组件注入,否则扫描不到就不会去执行定时器
@Component

//要把定时器的类作为组件注入,否则扫描不到就不会去执行定时器
@Component
public class TimingTask {
//具体的Cron表达式,根据Cron表达式设置具体是什么时间执行定时器
    @Scheduled(cron = "0 0 2 * * ?")
//    @Scheduled(cron = "* 59 17 * * ?")
    public void dailyLogDeal() {
        try {
//Java如何执行linux服务器上的.sh文件
            Runtime.getRuntime().exec("/xxxx/xxx/xxxxxxx/xxxx/xxxxx.sh").waitFor();
            System.out.println("定时任务执行 - > 每日日志保存成功");
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

具体实现日志备份与清空的命令行怎么写:

即java代码中的

Runtime.getRuntime().exec("/data/auto_del_30_log.sh").waitFor();

中的.sh文件该怎么写

#获取前一天的日期

date=`date -d "yesterday" +%Y_%m_%d`

#复制原始nohup.out到备份目录,并以前一天的日期进行命名

cp /home/lgq/smartBoot/java/nohup.out /home/lgq/smartBoot/java/nohupLogs/$date.out

#清空原始nohup.out中的内容 /dev/null 这个文件是本身就自带的 里面的值就是空 因此可以直接拷贝过去来实现清空nohup.out

cat /dev/null > /home/lgq/smartBoot/java/nohup.out

 vim auto_del_30_log.sh

#清理1个月前日志文件
find /data/nohupLogs -mtime +30 -exec rm -f {} \;

if [ ! -d /data/nohupLogs  ];then
mkdir /data/nohupLogs
echo dir exist
fi

#取前一天的日期
date=`date -d "yesterday" +%Y_%m_%d`

cp /data/nohup.out /data/nohupLogs/$date.out

#清空原始nohup.out中的内容 /dev/null 这个文件是本身就自带的 里面的值就是空 因此可以直接拷贝过去来实现清空nohup.out

cat /dev/null > /data/nohup.out
                       


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值