Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux find + crontab 實現日誌定期遷移:按時間/大小篩選自動歸檔

編輯:關於 Linux

利用 find 的 -mtime、-size 參數搭配 crontab,可自動將舊日誌移至備份區。本文提供完整腳本範例與排程設定。

find 關鍵參數回顧

參數說明
-mtime +n修改時間超過 n 天前
-mtime -n修改時間在 n 天內
-size +10k大於 10KB(k/M/G 單位)
-type f一般檔案
-exec cmd {} \;對匹配檔執行命令

日誌遷移腳本範例(每兩週執行,遷移 14 天前日誌)

#!/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

crontab 排程

# 每兩週的週日 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 閾值)構建完整日誌生命週期管理。

Copyright © Windows教程網 All Rights Reserved