萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 使用 find + crontab 定時刪除過期檔案:釋放磁碟空間自動化腳本

伺服器長期運行會產生大量日誌、暫存、備份檔案,透過 find 指令搭配 crontab 定時清理超過指定天數的檔案,能有效避免磁碟爆滿導致服務中斷。本文提供標準化清理腳本與排程設定。

核心指令解析

find /var/www/ -type f -mtime +30 -exec rm -f '{}' \;

時間參數對照

參數說明
/var/www/搜尋起始路徑(遞迴子目錄)
-type f僅匹配一般檔案(排除目錄、連結、裝置檔)
-mtime +30修改時間超過 30 天(30*24小時前)
-exec rm -f '{}' \;對每個匹配檔案執行強制刪除,{} 為檔案路徑佔位符

設定 Crontab 定時執行

# 編輯 root 排程
sudo crontab -e

# 每天凌晨 1:30 執行清理
30 1 * * * find /var/www/ -type f -mtime +30 -exec rm -f '{}' \;

進階:安全增強版腳本

#!/bin/bash
# safe-cleanup.sh
LOG_FILE="/var/log/cleanup.log"
TARGET_DIR="/var/www"
DAYS=30

echo "=== $(date) Cleanup started ===" >> "$LOG_FILE"

# 乾跑模式:先列出將刪除的檔案
find "$TARGET_DIR" -type f -mtime +"$DAYS" -ls >> "$LOG_FILE"

# 實際刪除(移除 -ls 並取消註解下行)
# find "$TARGET_DIR" -type f -mtime +"$DAYS" -delete >> "$LOG_FILE" 2>&1

echo "=== $(date) Cleanup finished ===" >> "$LOG_FILE"

部署方式:

chmod +x safe-cleanup.sh
# crontab -e
30 1 * * * /path/to/safe-cleanup.sh

關鍵安全提醒

  • 先測試:執行 find ... -ls 或 -print 確認匹配檔案無誤後,再啟用刪除
  • 保護關鍵目錄:排除重要資料目錄 -not -path "/var/www/important/*"
  • 避開系統目錄:絕不可 對 /、/var、/etc、/usr 等系統目錄執行
  • 日誌輪替:優先配置 logrotate 管理服務日誌,而非暴力刪除
  • 刪除確認:生產環境建議加入 -ok rm -f {} \; 互動確認(非自動化)或移至暫存區保留 7 天

替代方案

  • tmpwatch / tmpreaper:專門清理 /tmp、/var/tmp 等暫存目錄
  • logrotate:系統日誌標準輪替工具,支援壓縮、郵寄、腳本觸發
  • systemd-tmpfiles:現代 systemd 系統內建臨時檔案管理
copyright © 萬盛學電腦網 all rights reserved
參數含義範例
-mtime +n修改時間超過 n 天前-mtime +7 (一週前)
-mtime -n修改時間在 n 天內-mtime -1 (24小時內)
-mtime n修改時間恰好 n 天前-mtime 3 (3天前那一天)
-mmin +n修改時間超過 n 分鐘前-mmin +60 (一小時前)
-atime存取時間同 mtime 語法
-ctime狀態改變時間同 mtime 語法