Linux下删除过期日志文件

简单记录一下工作中遇到的需求问题,写点博客记录一下自己的成长历程。

目前的项目中有需求,需要去定期处理掉服务器上的过期日志文件还有服务器本地存储的过期图片。

理想状态下是7天前的日志和图片都被删掉,目前这篇文章记录删除本地Linux服务器上的日志和图片。

我想到4种实现方式

1 - Java定时任务直接删除本地指定文件,用过滤器过滤出7天的文件,直接用删除文件,这个方法最直接,但是过滤的逻辑和过程就复杂了。

2 - Linux编写删除7天前的日志和图片,这个仅需两行代码即可,但是定时任务要添加到Linux系统中去,需要root权限

3 - Linux编写删除脚本,Java创建定时任务去执行这个脚本,过期时间定时时间都可以随意变更比较灵活,而且维护起来复杂度低。

4 - Java中把Linux脚本编写成字符串格式,用Java定时任务去执行这个字符串生成的脚本。最简洁,最方便

4种方法我都尝试了,最终还是选择了第二种,又快还简单。
当然我也把第3种方法写进去了.希望对看到文章的你有所帮助。

1. Linux脚本编写

创建shell脚本 touch +文件绝对路径

touch /mnt/data/opt/data/cow_spray_control_java/48b02d1854a9/shell/delete.sh

分配可执行权限 chmod +x +文件绝对路径

chmod +x /mnt/data/opt/data/cow_spray_control_java/48b02d1854a9/shell/delete.sh

进入目录并编辑脚本文件

cd /mnt/data/opt/data/cow_spray_control_java/48b02d1854a9/shell

vim delete.sh

Linux自动删除n天前日志及实例命令

find /opt/log/ -mtime +7 -name "*.log" -exec rm -rf {} \;

find :Linux的查找命令,用户查找指定条件的文件;

/opt/log/ : 想要清理的日志存放目录;

-mtime +7 : 查找7天前的文件,个数字代表天数;

“*.log” :希望查找的文件类型,“ .jpg” 表示茶桌所有图片,举一反三 “ *+ 文件后缀”代表这类文件

-exec :固定写法;

rm -rf:强制删除文件,新手谨慎使用,容易删光跑路;

{} ; :固定写法 一对大括号{}+空格+反斜杠\ + 分号;

加入crontab(如果不用Java执行,可以直接Linux定时任务执行)
crontab -e
59 23 * * * /bin/sh /opt/log/logs_delete.sh

这个表示为,每天23点59分执行这个脚本。

2. Java定时任务编写

shellPath为shell脚本文件的绝对路径

 @Scheduled(fixedDelay = 24 * 60 * 60 * 1000)
    public void run() {

        // 把要执行的脚本文件路径写成字符串格式传入exec执行脚本,注意linux下文件目录/使用反斜杠
        String[] scriptPath = new String[] {"/bin/sh", shellPath};
        try {
            LOGGER.info("定时清理任务开始");
            // 执行脚本
            Runtime.getRuntime().exec(scriptPath);
        } catch (IOException e) {
            LOGGER.error("定时清除脚本执行异常", e);
        }
        LOGGER.info("定时清理任务结束");
    }
Logo

更多推荐