本文目录导读:

Linux Shell 脚本(最常用)
#!/bin/bash
# 日志清理脚本
# 功能:删除指定目录下超过N天的日志文件
LOG_DIR="/var/log/myapp" # 日志目录
DAYS_TO_KEEP=7 # 保留天数
FILE_PATTERN="*.log" # 文件匹配模式
echo "开始清理日志文件..."
echo "目标目录: $LOG_DIR"
echo "保留天数: $DAYS_TO_KEEP"
# 查找并删除旧日志文件
find $LOG_DIR -name "$FILE_PATTERN" -type f -mtime +$DAYS_TO_KEEP -exec rm -f {} \;
# 或者安全的方式:先打印再删除
# find $LOG_DIR -name "$FILE_PATTERN" -type f -mtime +$DAYS_TO_KEEP -print
echo "清理完成!"
# 可选:记录清理日志
echo "$(date) - 清理了 $(find $LOG_DIR -name "$FILE_PATTERN" -type f -mtime +$DAYS_TO_KEEP | wc -l) 个文件" >> /var/log/cleanup.log
更安全的版本(带确认和备份)
#!/bin/bash
# 安全日志清理脚本
LOG_DIR="/var/log/myapp"
DAYS_TO_KEEP=30
BACKUP_DIR="/backup/logs"
DRY_RUN=true # 设置为true时只显示不删除
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m' # No Color
echo -e "${GREEN}[INFO]${NC} 日志清理脚本启动"
# 创建备份目录
mkdir -p $BACKUP_DIR
# 查找要清理的文件
OLD_FILES=$(find $LOG_DIR -name "*.log" -type f -mtime +$DAYS_TO_KEEP)
if [ -z "$OLD_FILES" ]; then
echo -e "${GREEN}[INFO]${NC} 没有需要清理的文件"
exit 0
fi
echo "以下文件将被清理:"
echo "$OLD_FILES"
if [ "$DRY_RUN" = true ]; then
echo -e "${GREEN}[INFO]${NC} 预运行模式,未实际删除文件"
exit 0
fi
# 备份后再删除
echo "$OLD_FILES" | while read file; do
if [ -f "$file" ]; then
# 备份
cp "$file" "$BACKUP_DIR/"
# 删除原文件
rm -f "$file"
echo "已清理: $file"
fi
done
echo -e "${GREEN}[INFO]${NC} 日志清理完成"
Python 脚本(跨平台)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
日志清理脚本
支持 Linux、Windows、macOS
"""
import os
import time
import logging
from datetime import datetime, timedelta
# 配置
LOG_CONFIGS = [
{
"path": "/var/log/myapp",
"days": 7,
"pattern": ".log"
},
{
"path": "/var/log/nginx",
"days": 14,
"pattern": ".log"
}
]
def setup_logger():
"""设置日志记录"""
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('/var/log/log_cleanup.log'),
logging.StreamHandler()
]
)
return logging.getLogger(__name__)
def clean_old_logs(log_path, days_to_keep, file_pattern):
"""清理指定目录的旧日志"""
logger = logging.getLogger(__name__)
cutoff_time = time.time() - (days_to_keep * 86400) # 86400秒 = 1天
if not os.path.exists(log_path):
logger.warning(f"目录不存在: {log_path}")
return
cleaned_count = 0
for root, dirs, files in os.walk(log_path):
for file in files:
if not file.endswith(file_pattern):
continue
file_path = os.path.join(root, file)
try:
# 获取文件修改时间
file_mtime = os.path.getmtime(file_path)
# 如果文件超过保留天数
if file_mtime < cutoff_time:
# 删除文件
os.remove(file_path)
cleaned_count += 1
logger.info(f"已清理: {file_path}")
except Exception as e:
logger.error(f"清理文件失败 {file_path}: {str(e)}")
if cleaned_count > 0:
logger.info(f"总共清理了 {cleaned_count} 个文件")
else:
logger.info("没有需要清理的文件")
def main():
"""主函数"""
logger = setup_logger()
logger.info("=" * 50)
logger.info("日志清理开始")
for config in LOG_CONFIGS:
clean_old_logs(
config["path"],
config["days"],
config["pattern"]
)
logger.info("日志清理完成")
if __name__ == "__main__":
main()
Windows PowerShell 脚本
# 日志清理脚本 (Windows)
# 保存为 clean-logs.ps1
$LogPaths = @(
"C:\logs\app1\*.log",
"C:\logs\app2\*.log"
)
$DaysToKeep = 30
function Clean-Logs {
param(
[string]$Path,
[int]$DaysOld
)
$CutoffDate = (Get-Date).AddDays(-$DaysOld)
Write-Host "清理目录: $Path" -ForegroundColor Green
# 查找旧文件
$OldFiles = Get-ChildItem -Path $Path -Recurse |
Where-Object { $_.CreationTime -lt $CutoffDate }
if ($OldFiles.Count -eq 0) {
Write-Host "没有需要清理的文件" -ForegroundColor Yellow
return
}
Write-Host "找到 $($OldFiles.Count) 个旧文件" -ForegroundColor Yellow
# 删除文件
foreach ($File in $OldFiles) {
try {
Remove-Item -Path $File.FullName -Force
Write-Host "已删除: $($File.FullName)" -ForegroundColor Gray
}
catch {
Write-Error "删除失败: $($File.FullName): $($_.Exception.Message)"
}
}
Write-Host "清理完成" -ForegroundColor Green
}
# 执行清理
foreach ($Path in $LogPaths) {
Clean-Logs -Path $Path -DaysOld $DaysToKeep
}
# 记录日志
$LogEntry = "[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] 日志清理完成"
Add-Content -Path "C:\logs\cleanup.log" -Value $LogEntry
crontab 配置(Linux 定时执行)
# 每天凌晨2点执行日志清理 0 2 * * * /path/to/cleanup.sh # 每天凌晨3点执行,并记录日志 0 3 * * * /path/to/cleanup.sh > /var/log/cleanup_cron.log 2>&1 # 每周日凌晨1点执行 0 1 * * 0 /path/to/cleanup.sh
使用建议
- 先测试后使用:在正式环境使用前先测试
- 保留备份:重要日志建议先备份再删除
- 设置合适的保留期:根据业务需求确定
- 添加错误处理:确保脚本健壮性
- 记录操作日志:便于追踪问题
选择哪个脚本取决于您的操作系统和需求,Linux 推荐使用 Shell 脚本,Windows 推荐 PowerShell,需要跨平台则选择 Python。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播