你知道如何用脚本自动清理3天前的旧日志吗?

wen 实用脚本 48

本文目录导读:

你知道如何用脚本自动清理3天前的旧日志吗?

  1. 脚本示例:clean_old_logs.sh
  2. 使用方法
  3. 重要说明
  4. 扩展:Windows 系统(PowerShell 脚本)

当然可以,以下是一个基于 Shell 脚本(适用于 Linux/Unix 系统)的通用方法,用于自动清理 3 天前的旧日志文件,脚本会删除修改时间早于 3 天的 .log 文件(或指定模式的文件)。

脚本示例:clean_old_logs.sh

#!/bin/bash
# 定义日志目录(根据需要修改)
LOG_DIR="/var/log/myapp"
# 定义日志文件匹配模式(*.log 或 *.txt 等)
FILE_PATTERN="*.log"
# 定义保留天数(3天前的文件将被删除)
DAYS_OLD=3
# 检查目录是否存在
if [ ! -d "$LOG_DIR" ]; then
    echo "错误:目录 $LOG_DIR 不存在"
    exit 1
fi
# 查找并删除指定天数前的文件
find "$LOG_DIR" -type f -name "$FILE_PATTERN" -mtime +"$DAYS_OLD" -exec rm -f {} \;
# 可选:删除空目录(如果日志文件按日期分文件夹)
# find "$LOG_DIR" -type d -empty -delete
echo "已清理 $LOG_DIR 中 $DAYS_OLD 天前的 $FILE_PATTERN 文件。"

使用方法

  1. 保存脚本
    将上述代码保存为 clean_old_logs.sh

  2. 赋予执行权限

    chmod +x clean_old_logs.sh
  3. 手动测试运行(建议先加 -print 看看会删除哪些文件,确认无误后再执行删除)

    # 仅查看会删除哪些文件(不实际删除)
    find /var/log/myapp -type f -name "*.log" -mtime +3 -print
    # 实际删除
    ./clean_old_logs.sh
  4. 设置定时任务(cron)
    使用 crontab -e 添加一行,例如每天凌晨 2 点执行:

    0 2 * * * /path/to/clean_old_logs.sh > /dev/null 2>&1

重要说明

  • 风险提示-exec rm -f {} \; 会直接删除文件,请务必先在测试环境验证,或先用 -print 预览。
  • 修改时间 vs 创建时间-mtime 基于文件的最后修改时间,如果日志文件被持续写入,最后修改时间会不断更新,这可能导致文件永远不会被删除(如果你希望删除“创建时间”早于 3 天的文件,需使用 -ctime 或通过 stat 处理,但通常 -mtime 更符合实际需求)。
  • 日志文件压缩:如果你有 .gz 等压缩文件,可调整 FILE_PATTERN 或单独处理。
  • 跨平台:该脚本基于 GNU find(Linux 标准),macOS 的 find 略有不同(-mtime 行为一致),但若使用 -delete 参数,macOS 的 find 也支持。

扩展:Windows 系统(PowerShell 脚本)

如果你在 Windows 上管理日志文件,可以使用 PowerShell:

# 定义路径和天数
$logPath = "C:\Logs"
$daysOld = 3
$filePattern = "*.log"
Get-ChildItem -Path $logPath -Filter $filePattern -Recurse |
    Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$daysOld) } |
    Remove-Item -Force -Verbose

将脚本保存为 .ps1 文件,通过任务计划程序定时运行(注意 PowerShell 执行策略设置)。

抱歉,评论功能暂时关闭!