利用 find 的 -mtime、-size 參數搭配 crontab,可自動將舊日誌移至備份區。本文提供完整腳本範例與排程設定。
| 參數 | 說明 |
|---|---|
-mtime +n | 修改時間超過 n 天前 |
-mtime -n | 修改時間在 n 天內 |
-size +10k | 大於 10KB(k/M/G 單位) |
-type f | 一般檔案 |
-exec cmd {} \; | 對匹配檔執行命令 |
#!/bin/bash
# 配置區
backup_dir="/backup/log"
keep_days=14
week_num=$(date +%W)
flag=$((week_num % 2)) # 每兩週執行一次
# 待遷移目錄陣列
migrate_dirs=("/var/log/nginx/test1")
# 執行遷移
if [ $flag -eq 1 ]; then
for dir in "${migrate_dirs[@]}"; do
if [ -d "$dir" ]; then
# 建立對應備份目錄
[ ! -d "$backup_dir$dir" ] && mkdir -p "$backup_dir$dir"
# 遷移檔案
for file in $(find "$dir" -type f -mtime +$keep_days -exec ls {} \;); do
mv "$file" "$backup_dir$dir"
done
fi
done
fi
# 每兩週的週日 04:00 執行
0 4 * * 7/2 /home/user/scripts/migrate.sh
# 找出 /var/log 下大於 10MB 的檔案
find /var/log -type f -size +10M -ls
rsync -a --remove-source-files 替代 mv,支援跨檔案系統且可驗證flock)防止重複執行gzip/xz)節省空間find ... -exec ls {} \; 效率較低,大量檔案建議 find ... -print0 | xargs -0 mv -t 目標clean_dir 筆誤,已修正為 migrate_dirs)echo mv ... 確認路徑正確再執行實際移動自動化日誌遷移能有效防止磁碟耗盡,配合監控告警(如 df -h 閾值)構建完整日誌生命週期管理。
Ubuntu 安裝 NVIDIA 專有驅動並切換雙顯卡:效能模式與省電模式一鍵切換
Ubuntu 無法掛載 NTFS 分區?關閉 Windows 快速啟動徹底解決
PHP-CGI 進程 CPU 100% 根因分析與三層優化方案
Linux 系統下 Git 安裝、配置與 GitHub 協作實戰全攻略
Ubuntu 13.10 VirtualBox 無法啟動解決方案:Kernel Driver 錯誤、DKMS 重編譯、Kernel Headers 安裝
Linux Crontab 定時任務實戰指南:從語法解析到生產級部署規範