Shell脚本如何定时清理系统垃圾文件

wen 实用脚本 2

本文目录导读:

Shell脚本如何定时清理系统垃圾文件

  1. 基础清理脚本
  2. 使用cron定时任务
  3. 完整的自动化清理方案
  4. 设置systemd定时任务(替代cron)
  5. 使用注意事项
  6. 快速部署示例

我为您提供几种Shell脚本定时清理系统垃圾文件的方法:

基础清理脚本

#!/bin/bash
# 系统垃圾文件清理脚本
echo "开始清理系统垃圾文件..."
# 清理系统日志
sudo journalctl --vacuum-time=3d
sudo find /var/log -name "*.log" -mtime +7 -exec rm -f {} \;
# 清理临时文件
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
# 清理包管理器缓存 (Ubuntu/Debian)
if command -v apt-get &> /dev/null; then
    sudo apt-get clean
    sudo apt-get autoclean
    sudo apt-get autoremove -y
fi
# 清理包管理器缓存 (CentOS/RHEL)
if command -v yum &> /dev/null; then
    sudo yum clean all
fi
# 清理Docker资源 (如果安装了Docker)
if command -v docker &> /dev/null; then
    docker system prune -f
fi
# 清理用户缓存
rm -rf ~/.cache/*
# 清理缩略图缓存
rm -rf ~/.thumbnails/* 2>/dev/null
rm -rf ~/.cache/thumbnails/* 2>/dev/null
echo "清理完成!"

使用cron定时任务

设置每天凌晨2点执行清理

# 编辑crontab
crontab -e
# 添加以下行(每天凌晨2点执行)
0 2 * * * /path/to/cleanup_script.sh
# 或者每小时的30分执行
30 * * * * /path/to/cleanup_script.sh

更详细的cron时间配置

# 语法:分 时 日 月 周 命令
# 每天0点执行
0 0 * * * /path/to/script.sh
# 每周一凌晨3点执行
0 3 * * 1 /path/to/script.sh
# 每月1号凌晨4点执行
0 4 1 * * /path/to/script.sh
# 每15分钟执行一次
*/15 * * * * /path/to/script.sh

完整的自动化清理方案

#!/bin/bash
# 完整的系统清理脚本
LOG_FILE="/var/log/cleanup_$(date +%Y%m%d).log"
MIN_DISK_SPACE=10  # 最低磁盘空间百分比
# 日志函数
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
}
# 检查磁盘空间
check_disk_space() {
    local usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
    if [ $usage -gt $((100 - MIN_DISK_SPACE)) ]; then
        log "警告: 磁盘使用率已达到 ${usage}%"
        log "执行深度清理..."
        return 0
    else
        log "当前磁盘使用率: ${usage}%,正常范围内"
        return 1
    fi
}
# 清理系统日志
clean_logs() {
    log "清理系统日志..."
    sudo journalctl --vacuum-time=2d &>/dev/null
    sudo find /var/log -name "*.log" -mtime +3 -delete
    sudo find /var/log -name "*.gz" -mtime +3 -delete
    log "系统日志清理完成"
}
# 清理临时文件
clean_temp() {
    log "清理临时文件..."
    sudo find /tmp -type f -atime +1 -delete 2>/dev/null
    sudo find /var/tmp -type f -atime +1 -delete 2>/dev/null
    log "临时文件清理完成"
}
# 清理软件包缓存
clean_packages() {
    log "清理软件包缓存..."
    if command -v apt &> /dev/null; then
        sudo apt-get clean
        sudo apt-get autoclean
    elif command -v yum &> /dev/null; then
        sudo yum clean all
    fi
    log "软件包缓存清理完成"
}
# 清理旧内核 (Debian/Ubuntu)
clean_old_kernels() {
    if command -v apt &> /dev/null; then
        log "清理旧内核..."
        sudo apt-get autoremove --purge -y &>/dev/null
    fi
}
# 主清理函数
main_cleanup() {
    log "===== 开始系统清理 ====="
    # 检查是否需要深度清理
    check_disk_space
    need_deep=$?
    clean_logs
    clean_temp
    clean_packages
    if [ $need_deep -eq 0 ]; then
        clean_old_kernels
        # 深度清理时同时清理Docker
        if command -v docker &> /dev/null; then
            docker system prune -a -f &>/dev/null
        fi
    fi
    final_usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
    log "清理完成,当前磁盘使用率: ${final_usage}%"
    log "===== 清理结束 ====="
}
# 执行主清理
main_cleanup

设置systemd定时任务(替代cron)

# 创建service文件
sudo nano /etc/systemd/system/system-cleanup.service
[Unit]
Description=System Cleanup Service
[Service]
Type=oneshot
ExecStart=/path/to/cleanup_script.sh
User=root
# 创建timer文件
sudo nano /etc/systemd/system/system-cleanup.timer
[Unit]
Description=Run system cleanup every day at 3am
[Timer]
OnCalendar=daily
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
# 启用定时器
sudo systemctl enable system-cleanup.timer
sudo systemctl start system-cleanup.timer

使用注意事项

  1. 权限管理:某些操作需要root权限,使用sudo
  2. 日志记录:建议将清理操作记录到日志文件
  3. 磁盘空间监控:在清理前检查磁盘使用情况
  4. 安全考虑
    • 不要删除不确定的文件
    • 保留近期日志文件
    • 谨慎使用rm -rf命令

快速部署示例

# 1. 创建脚本
sudo nano /usr/local/bin/cleanup.sh
# 粘贴上面第3部分的完整脚本
# 2. 添加执行权限
sudo chmod +x /usr/local/bin/cleanup.sh
# 3. 设置定时任务
crontab -e
# 添加:0 3 * * * /usr/local/bin/cleanup.sh
# 4. 手动测试
sudo /usr/local/bin/cleanup.sh

这样配置后,系统就会按照设定的时间自动清理垃圾文件了。

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