Linux定时日志切割的两种办法

崧峻
原创
发布时间: 2025-06-10 02:22:29 | 阅读数 0收藏数 0评论数 0
封面
我们在程序运行的过程中往往会不间断的产生很多的日志,日志过大的时候我们进行查看会很消耗性能的情况,甚至会导致服务器宕机,本期就来教大家如何日志定时切割,日志有存在进程和没有进程两种情况,我们都给大家讲解一下
1

存在进程日志切割-shell脚本编写

首先我们打开服务器,进入到日志存在的目录,然后输入

vim logrotate.sh 如图1所示

然后复制粘贴以下内容

#!/bin/bash

# 日志文件地址路径
LOG_FILE_PATH="/opt/project/"

# 日志文件名
LOG_FILE_NAME="log.out"

# 日志文件
LOG_FILE="$LOG_FILE_PATH$LOG_FILE_NAME"

# 获取昨天的日期,格式为 YYYY-MM-DD
YESTERDAY_DATE=$(date -d "yesterday" +"%Y-%m-%d")

# 生成新的日志文件名
NEW_LOG_FILE="${LOG_FILE_PATH}log/${YESTERDAY_DATE}-${LOG_FILE_NAME}"

# 如果原始日志文件存在
if [ -f "$LOG_FILE" ]; then
    # 将原始日志文件复制一份并设置新的日志文件名
    cp "$LOG_FILE" "$NEW_LOG_FILE"
    # 清空当前日志文件内容
    cat /dev/null > "$LOG_FILE"
    echo "日志文件已被切割并保存为 $NEW_LOG_FILE"
else
    echo "日志文件 $LOG_FILE 不存在!"
fi

# 删除旧日志文件,保留最近一年天的日志文件
find "$LOG_FILE_PATH"log -name "*-$LOG_FILE_NAME" -type f -mtime +365 -exec rm -f {} \;

然后输入 esc 进入指令模式 输入 :wq 进行保存 如图2所示

然后大家可以 ./ogrotate.sh 进行运行测试

切割好的文件如图3所示

2

存在进程日志切割-shell脚本讲解

下面我们来讲解一下这个编写的日志,

首先第一行

#!/bin/bash 告诉操作系统使用 Bash 解释器来执行该脚本,

# 日志文件地址路径

LOG_FILE_PATH="/opt/project/"

# 日志文件名

LOG_FILE_NAME="log.out"

上面这两行也是我们复制到服务器需要更改到,第一个是日志存放的地址,第二个是日志的名称,由于我们的日志是存在进程的,所以没有办法直接进行替换只能把原本的日志内容复制一份到其他的日志文件,然后清空当前日志文件的内容

# 删除旧日志文件,保留最近一年天的日志文件

find "$LOG_FILE_PATH"log -name "*-$LOG_FILE_NAME" -type f -mtime +365 -exec rm -f {} \;

然后最后这行是定期删除文件保存了多久的,大家可以根据实际情况进行修改

3

无进程日志切割脚本

创建一个脚本如图1所示,然后把脚本代码粘贴进去保存。

没有进程的日志文件,我采用的方式是把日志文件重命名在创建一份新的出来和之前的一样,这个方法比上个方法丢失日志数据的概率会更小,脚本如下

#!/bin/bash

# 日志文件路径
LOG_FILE="/usr/local/1/1.log"

# 获取昨天的日期,格式为 YYYY-MM-DD
YESTERDAY_DATE=$(date -d "yesterday" +"%Y-%m-%d")

# 生成新的日志文件名
NEW_LOG_FILE="${LOG_FILE}.${YESTERDAY_DATE}"

# 如果原始日志文件存在
if [ -f "$LOG_FILE" ]; then
    # 将原始日志文件重命名为新的日志文件名
    mv "$LOG_FILE" "$NEW_LOG_FILE"
    # 创建一个新的空的原始日志文件
    touch "$LOG_FILE"
    # 重启服务或重新加载日志记录程序(视具体情况而定)
    # 例如:systemctl restart your_service
    echo "日志文件已被切割并保存为 $NEW_LOG_FILE"
else
    echo "日志文件 $LOG_FILE 不存在!"
fi

# 删除旧日志文件,保留最近7天的日志文件
find /usr/local/1 -name "1.log.*" -type f -mtime +7 -exec rm -f {} \;
4

定时任务创建

输入命令 crontab -e 如图1所示

0 0 * * * 脚本文件地址 把该命令粘贴进去 如图2所示

然后 esc :wq 进行保存 如图3所示,这样半夜0点的定时任务就创建好了

阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载