本文目录导读:

- Linux/Unix 环境下 (Shell脚本 + Crontab)
- Python 版本 (跨平台)
- Windows 版本 (PowerShell)
- Node.js 版本
- Docker 环境 (推荐)
- 使用方法
- 安全建议
我来为您提供几种不同环境下实现定时清理聊天记录的脚本方案。
Linux/Unix 环境下 (Shell脚本 + Crontab)
Shell 清理脚本
#!/bin/bash # 聊天记录清理脚本 # 保存为:clean_chat_logs.sh # 配置变量 LOG_DIR="/var/log/chat" # 聊天记录目录 RETENTION_DAYS=7 # 保留天数 LOG_FILE="/var/log/chat_clean.log" # 清理日志 # 记录开始时间 echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始清理聊天记录" >> $LOG_FILE # 清理超过指定天数的文件 find $LOG_DIR -name "*.log" -type f -mtime +$RETENTION_DAYS -delete 2>>$LOG_FILE # 或者清理指定目录下的所有文件(谨慎使用) # find $LOG_DIR -type f -mtime +$RETENTION_DAYS -delete # 清理空目录 find $LOG_DIR -type d -empty -delete 2>>$LOG_FILE # 记录结束时间 echo "[$(date '+%Y-%m-%d %H:%M:%S')] 清理完成" >> $LOG_FILE echo "---" >> $LOG_FILE # 设置执行权限 # chmod +x clean_chat_logs.sh
添加到 Crontab 定时任务
# 编辑 crontab crontab -e # 添加以下行(每天凌晨2点执行) 0 2 * * * /path/to/clean_chat_logs.sh # 或者每6小时执行一次 0 */6 * * * /path/to/clean_chat_logs.sh
Python 版本 (跨平台)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
聊天记录定时清理脚本
文件名:clean_chat_logs.py
"""
import os
import time
import logging
from datetime import datetime, timedelta
import schedule # 需要安装: pip install schedule
# 配置
CHAT_DIR = "./chat_logs" # 聊天记录目录
RETENTION_DAYS = 7 # 保留天数
LOG_FILE = "clean_log.txt"
# 设置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(message)s',
handlers=[
logging.FileHandler(LOG_FILE, encoding='utf-8'),
logging.StreamHandler()
]
)
def clean_chat_logs():
"""清理过期聊天记录"""
try:
if not os.path.exists(CHAT_DIR):
logging.warning(f"目录不存在: {CHAT_DIR}")
return
cutoff_date = datetime.now() - timedelta(days=RETENTION_DAYS)
cleaned_count = 0
for filename in os.listdir(CHAT_DIR):
filepath = os.path.join(CHAT_DIR, filename)
# 跳过目录
if os.path.isdir(filepath):
continue
# 获取文件修改时间
file_time = datetime.fromtimestamp(os.path.getmtime(filepath))
# 删除过期文件
if file_time < cutoff_date:
os.remove(filepath)
cleaned_count += 1
logging.info(f"已删除: {filename}")
logging.info(f"清理完成,共删除 {cleaned_count} 个文件")
except Exception as e:
logging.error(f"清理过程中出错: {e}")
def clean_by_file_count(max_files=100):
"""按文件数量清理(保留最新文件)"""
try:
files = []
for filename in os.listdir(CHAT_DIR):
filepath = os.path.join(CHAT_DIR, filename)
if os.path.isfile(filepath):
files.append((filepath, os.path.getmtime(filepath)))
# 按修改时间排序
files.sort(key=lambda x: x[1], reverse=True)
# 删除超出限制的文件
if len(files) > max_files:
for filepath, _ in files[max_files:]:
os.remove(filepath)
logging.info(f"按数量限制删除: {os.path.basename(filepath)}")
except Exception as e:
logging.error(f"按数量清理出错: {e}")
# 定时任务设置
def run_scheduled_tasks():
"""运行定时任务"""
# 每天凌晨2点执行
schedule.every().day.at("02:00").do(clean_chat_logs)
# 每天凌晨3点执行按数量清理
schedule.every().day.at("03:00").do(clean_by_file_count, max_files=100)
# 或者每6小时执行一次
# schedule.every(6).hours.do(clean_chat_logs)
logging.info("定时清理任务已启动...")
while True:
schedule.run_pending()
time.sleep(60) # 每分钟检查一次
if __name__ == "__main__":
# 立即执行一次
clean_chat_logs()
# 启动定时任务
# run_scheduled_tasks()
# 或者使用更简单的方式:Windows任务计划/Linux cron
print("脚本配置完成")
Windows 版本 (PowerShell)
# 聊天记录清理脚本
# 文件名: Clean-ChatLogs.ps1
# 配置参数
$ChatLogPath = "C:\ChatLogs"
$RetentionDays = 7
$LogFile = "C:\Logs\chat_clean.log"
# 记录函数
Function Write-Log {
param([string]$Message)
$TimeStamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
"$TimeStamp - $Message" | Out-File -FilePath $LogFile -Append
}
# 清理函数
Function Clean-ChatLogs {
try {
# 获取过期文件
$CutoffDate = (Get-Date).AddDays(-$RetentionDays)
# 删除过期文件
Get-ChildItem -Path $ChatLogPath -File |
Where-Object { $_.LastWriteTime -lt $CutoffDate } |
Remove-Item -Force
# 删除空文件夹
Get-ChildItem -Path $ChatLogPath -Directory |
Where-Object { (Get-ChildItem $_.FullName -File).Count -eq 0 } |
Remove-Item -Force
Write-Log "清理完成"
}
catch {
Write-Log "错误: $_"
}
}
# 执行清理
Write-Log "开始清理"
Clean-ChatLogs
# 设置Windows任务计划程序示例命令:
# schtasks /create /tn "CleanChatLogs" /tr "powershell.exe -File C:\scripts\Clean-ChatLogs.ps1" /sc daily /st 02:00
Node.js 版本
// clean_chat.js
const fs = require('fs');
const path = require('path');
const schedule = require('node-schedule'); // 需要安装: npm install node-schedule
// 配置
const config = {
chatDir: './chat_logs',
retentionDays: 7,
logFile: './clean_log.txt'
};
// 日志函数
function log(message) {
const timestamp = new Date().toISOString();
const logMessage = `${timestamp} - ${message}\n`;
console.log(logMessage.trim());
fs.appendFileSync(config.logFile, logMessage);
}
// 清理函数
async function cleanChatLogs() {
try {
if (!fs.existsSync(config.chatDir)) {
log(`目录不存在: ${config.chatDir}`);
return;
}
const files = fs.readdirSync(config.chatDir);
const cutoffDate = new Date();
cutoffDate.setDate(cutoffDate.getDate() - config.retentionDays);
let cleanedCount = 0;
files.forEach(filename => {
const filepath = path.join(config.chatDir, filename);
const stats = fs.statSync(filepath);
if (stats.isFile() && stats.mtime < cutoffDate) {
fs.unlinkSync(filepath);
cleanedCount++;
log(`已删除: ${filename}`);
}
});
log(`清理完成,共删除 ${cleanedCount} 个文件`);
} catch (error) {
log(`错误: ${error.message}`);
}
}
// 定时任务设置
function setupSchedule() {
// 每天凌晨2点执行
schedule.scheduleJob('0 2 * * *', () => {
log('定时清理任务开始');
cleanChatLogs();
});
log('定时任务已设置');
}
// 立即执行一次
cleanChatLogs();
// 启动定时任务
// setupSchedule();
// 或者使用setInterval(简单定时)
// setInterval(cleanChatLogs, 6 * 60 * 60 * 1000); // 每6小时
module.exports = { cleanChatLogs, setupSchedule };
Docker 环境 (推荐)
# Dockerfile FROM alpine:latest RUN apk add --no-cache bash COPY clean_chat.sh /usr/local/bin/ RUN chmod +x /usr/local/bin/clean_chat.sh # 安装cron RUN apk add --no-cache dcron # 添加定时任务 RUN echo "0 2 * * * /usr/local/bin/clean_chat.sh" >> /var/spool/cron/crontabs/root # 启动crond CMD ["crond", "-f", "-l", "2"]
使用方法
Linux/Mac:
# 直接执行 ./clean_chat_logs.sh # 添加到crontab crontab -e 0 2 * * * /path/to/clean_chat_logs.sh
Windows:
# 执行PowerShell脚本 .\Clean-ChatLogs.ps1 # 通过任务计划程序设置定时
Docker:
# 构建镜像 docker build -t chat-cleaner . # 运行容器 docker run -d --name chat-cleaner \ -v /path/to/chat/logs:/var/log/chat \ chat-cleaner
安全建议
- 先测试再正式使用
- 保留备份:首次使用前备份聊天记录
- 设置日志:记录清理操作以便审计
- 权限控制:确保脚本只有必要的权限
- 正则匹配:如果需要清理特定格式文件
请根据您的具体环境和需求选择合适的脚本,并确保在测试环境中充分测试后再部署到生产环境。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播