Shell 腳本實(shí)戰(zhàn):自動(dòng)定時(shí)清理日志文件,徹底磁盤爆滿問題
之前分享了如何快速處理磁盤爆滿的問題:《快速定位和解決磁盤爆滿問題的五步法,建議收藏》
今天分享一下如何定期處理日志,自動(dòng)化解決磁盤爆滿的問題,讓你多摸一會(huì)魚!
1. 實(shí)戰(zhàn)目標(biāo)
- 清理指定目錄中超過一定天數(shù)的日志文件
- 支持多個(gè)日志后綴(如 .log、.out、.txt)
- 記錄每次執(zhí)行日志
- 設(shè)為 crontab 定時(shí)執(zhí)行
2. Shell 腳本代碼
vim /opt/clean_expired_logs.sh
#!/bin/bash
# ========== 基礎(chǔ)配置 ==========
# 目標(biāo)日志目錄(請(qǐng)根據(jù)實(shí)際修改)
LOG_DIR="/data/css2/tomcat/logs/"
# 日志文件擴(kuò)展名,例如 log、txt、out 等
LOG_EXT="out"
# 日志保留天數(shù)(大于此天數(shù)的文件將被刪除)
KEEP_DAYS=7
# 腳本運(yùn)行日志(記錄清理過程和異常)
SCRIPT_LOG="/var/log/clean_logs_script.log"
# ========== 開始執(zhí)行 ==========
echo"[$(date +'%F %T')] 開始執(zhí)行日志清理任務(wù)..." >> "$SCRIPT_LOG"
# 檢查目標(biāo)目錄是否存在
if [ ! -d "$LOG_DIR" ]; then
echo"[$(date +'%F %T')] 錯(cuò)誤:目錄 $LOG_DIR 不存在!任務(wù)終止。" >> "$SCRIPT_LOG"
exit 1
fi
# 執(zhí)行日志清理
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')] 日志清理任務(wù)完成。" >> "$SCRIPT_LOG"
3. 測(cè)試運(yùn)行
保存腳本為clean_expired_logs.sh。
賦予執(zhí)行權(quán)限:
chmod +x clean_expired_logs.sh
手動(dòng)運(yùn)行測(cè)試:
./clean_expired_logs.sh
可查看運(yùn)行日志:
cat /var/log/clean_logs_script.log
4. 設(shè)置定時(shí)任務(wù)
通過 crontab 每天凌晨2點(diǎn)自動(dòng)執(zhí)行:
crontab -e
添加內(nèi)容:
0 2 * * * /bin/bash /opt/clean_expired_logs.sh
5. 擴(kuò)展建議
功能擴(kuò)展 | 方法 |
清理多個(gè)目錄 | 用數(shù)組或循環(huán)遍歷多個(gè) |
支持多個(gè)后綴名 |
|
刪除前預(yù)覽文件 | 先用 |
清理后統(tǒng)計(jì)空間 | 加入 |