Shell 腳本實戰:自動定時清理日志文件,徹底磁盤爆滿問題
作者:運維李哥
今天分享一下如何定期處理日志,自動化解決磁盤爆滿的問題,讓你多摸一會魚!
之前分享了如何快速處理磁盤爆滿的問題:《快速定位和解決磁盤爆滿問題的五步法,建議收藏》
今天分享一下如何定期處理日志,自動化解決磁盤爆滿的問題,讓你多摸一會魚!
1. 實戰目標
- 清理指定目錄中超過一定天數的日志文件
- 支持多個日志后綴(如 .log、.out、.txt)
- 記錄每次執行日志
- 設為 crontab 定時執行
2. Shell 腳本代碼
vim /opt/clean_expired_logs.sh
#!/bin/bash
# ========== 基礎配置 ==========
# 目標日志目錄(請根據實際修改)
LOG_DIR="/data/css2/tomcat/logs/"
# 日志文件擴展名,例如 log、txt、out 等
LOG_EXT="out"
# 日志保留天數(大于此天數的文件將被刪除)
KEEP_DAYS=7
# 腳本運行日志(記錄清理過程和異常)
SCRIPT_LOG="/var/log/clean_logs_script.log"
# ========== 開始執行 ==========
echo"[$(date +'%F %T')] 開始執行日志清理任務..." >> "$SCRIPT_LOG"
# 檢查目標目錄是否存在
if [ ! -d "$LOG_DIR" ]; then
echo"[$(date +'%F %T')] 錯誤:目錄 $LOG_DIR 不存在!任務終止。" >> "$SCRIPT_LOG"
exit 1
fi
# 執行日志清理
echo"[$(date +'%F %T')] 正在刪除 $KEEP_DAYS 天前的 *.$LOG_EXT 文件..." >> "$SCRIPT_LOG"
find "$LOG_DIR" -type f -name "*.$LOG_EXT" -mtime +$KEEP_DAYS -print -exec rm -f {} \; >> "$SCRIPT_LOG" 2>&1
echo"[$(date +'%F %T')] 日志清理任務完成。" >> "$SCRIPT_LOG"
3. 測試運行
保存腳本為clean_expired_logs.sh。
賦予執行權限:
chmod +x clean_expired_logs.sh
手動運行測試:
./clean_expired_logs.sh
可查看運行日志:
cat /var/log/clean_logs_script.log
4. 設置定時任務
通過 crontab 每天凌晨2點自動執行:
crontab -e
添加內容:
0 2 * * * /bin/bash /opt/clean_expired_logs.sh
5. 擴展建議
功能擴展 | 方法 |
清理多個目錄 | 用數組或循環遍歷多個 |
支持多個后綴名 |
|
刪除前預覽文件 | 先用 |
清理后統計空間 | 加入 |
責任編輯:趙寧寧
來源:
運維李哥不背鍋