Linux服務(wù)器使用Cron實(shí)現(xiàn)日志自動清理方案
一、背景問題
在生產(chǎn)環(huán)境中,隨著服務(wù)持續(xù)運(yùn)行,日志文件會不斷累積,占用大量磁盤空間。以某開發(fā)測試服務(wù)器為例:
- 日志目錄:
/data/logs - 服務(wù)數(shù)量:100+ 個微服務(wù)
- 磁盤占用:28G
- 待清理文件:24267 個(超過 7 天)
如果不及時清理,可能導(dǎo)致磁盤空間不足,影響服務(wù)正常運(yùn)行。
二、日志目錄分析
2.1 目錄結(jié)構(gòu)
/data/logs/ ├── cas_logs/ # CAS認(rèn)證服務(wù)日志 ├── nginx/ # Nginx日志 ├── ttpt_cas/ # 平臺CAS日志 ├── yyzx_testservice_logs/ # 測試服務(wù)日志 ├── ... (100+ 服務(wù)目錄) ├── spring.log # 散落的日志文件 └── spring.log.2025-12-31.log
2.2 日志文件命名規(guī)則
通過分析,發(fā)現(xiàn)日志文件主要有以下幾種命名格式:
| 格式 | 示例 |
|---|---|
| 服務(wù)名-YYYY-MM-DD-HH-序號.log | cas-2022-01-04-11-1.log |
| 服務(wù)名.log.YYYY-MM-DD.log | ttpt_gmservice_logs.log.2026-01-08.log |
| access_log.YYYY-MM-DD.log | access_log.2026-01-08.log |
| *.gz | 壓縮后的歷史日志 |
三、解決方案設(shè)計
3.1 技術(shù)方案
使用 find + cron 組合實(shí)現(xiàn)自動化日志清理:
- find 命令:按文件類型和修改時間篩選日志文件
- cron 定時任務(wù):每天定時執(zhí)行清理腳本
- 日志記錄:記錄每次清理操作,便于追溯
3.2 安全措施
| 安全措施 | 說明 |
|---|---|
| 目錄限制 | 只在 /data/logs 目錄下操作 |
| 文件類型限制 | 只刪除 *.log、*.log.*、*.gz 文件 |
| 只刪文件 | 使用 -type f,不刪除目錄 |
| 時間限制 | 只刪除 7 天前的文件(-mtime +7) |
| 操作日志 | 記錄每次清理的時間和文件數(shù)量 |
四、實(shí)施步驟
4.1 創(chuàng)建腳本目錄
mkdir -p /data/scripts
4.2 創(chuàng)建清理腳本
創(chuàng)建文件 /data/scripts/clean_old_logs.sh:
#!/bin/bash
#
# 日志清理腳本 - 刪除7天前的日志文件
# 每天早上9點(diǎn)由cron定時執(zhí)行
#
# 安全措施:
# 1. 只在 /data/logs 目錄下操作
# 2. 只刪除日志文件(*.log, *.log.*, *.gz)
# 3. 只刪除文件,不刪除目錄
# 4. 記錄清理日志
#
?
LOG_DIR="/data/logs"
DAYS=7
SCRIPT_LOG="/data/scripts/clean_logs_history.log"
?
# 確保只在 /data/logs 目錄下操作
if [ ! -d "$LOG_DIR" ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - 錯誤: 目錄 $LOG_DIR 不存在" >> "$SCRIPT_LOG"
exit 1
fi
?
# 記錄開始時間
echo "$(date '+%Y-%m-%d %H:%M:%S') - 開始清理 ${DAYS} 天前的日志文件..." >> "$SCRIPT_LOG"
?
# 統(tǒng)計將要刪除的文件數(shù)量
COUNT=$(find "$LOG_DIR" -type f \( -name "*.log" -o -name "*.log.*" -o -name "*.gz" \) -mtime +$DAYS 2>/dev/null | wc -l)
?
# 刪除日志文件
find "$LOG_DIR" -type f \( -name "*.log" -o -name "*.log.*" -o -name "*.gz" \) -mtime +$DAYS -delete 2>/dev/null
?
# 記錄完成
echo "$(date '+%Y-%m-%d %H:%M:%S') - 清理完成,共刪除 $COUNT 個文件" >> "$SCRIPT_LOG"4.3 賦予執(zhí)行權(quán)限
chmod +x /data/scripts/clean_old_logs.sh
4.4 配置 Cron 定時任務(wù)
# 添加定時任務(wù)(每天早上9點(diǎn)執(zhí)行) (crontab -l 2>/dev/null | grep -v "clean_old_logs.sh"; echo "0 9 * * * /bin/bash /data/scripts/clean_old_logs.sh") | crontab - ? # 驗(yàn)證是否添加成功 crontab -l
Cron 表達(dá)式說明:
0 9 * * * /bin/bash /data/scripts/clean_old_logs.sh │ │ │ │ │ │ │ │ │ └── 星期幾 (0-7, 0和7都表示周日) │ │ │ └──── 月份 (1-12) │ │ └────── 日期 (1-31) │ └──────── 小時 (0-23) └────────── 分鐘 (0-59)
五、驗(yàn)證與測試
5.1 預(yù)覽待刪除文件
# 查看將被刪除的文件數(shù)量 find /data/logs -type f \( -name "*.log" -o -name "*.log.*" -o -name "*.gz" \) -mtime +7 2>/dev/null | wc -l ? # 查看部分文件列表 find /data/logs -type f \( -name "*.log" -o -name "*.log.*" -o -name "*.gz" \) -mtime +7 2>/dev/null | head -20
5.2 手動執(zhí)行測試
# 執(zhí)行清理腳本 /bin/bash /data/scripts/clean_old_logs.sh ? # 查看清理記錄 cat /data/scripts/clean_logs_history.log ? # 查看磁盤使用變化 du -sh /data/logs
5.3 查看 Cron 執(zhí)行日志
# 查看系統(tǒng) cron 日志 tail -f /var/log/cron ? # 查看清理歷史記錄 cat /data/scripts/clean_logs_history.log
六、find 命令詳解
6.1 核心參數(shù)說明
| 參數(shù) | 說明 |
|---|---|
-type f | 只匹配文件,不匹配目錄 |
-name "*.log" | 匹配文件名模式 |
-o | 邏輯或,連接多個匹配條件 |
-mtime +7 | 修改時間超過 7 天 |
-delete | 刪除匹配的文件 |
2>/dev/null | 忽略權(quán)限不足等錯誤信息 |
6.2 時間參數(shù)對比
| 參數(shù) | 含義 |
|---|---|
-mtime +7 | 修改時間 > 7 天前 |
-mtime 7 | 修改時間 = 7 天前 |
-mtime -7 | 修改時間 < 7 天前(7 天內(nèi)) |
-atime | 訪問時間 |
-ctime | 狀態(tài)改變時間 |
七、排除或指定目錄清理
7.1 如何排除某些目錄不清理?
在 find 命令中添加 -not -path 參數(shù):
find "$LOG_DIR" -type f \
-not -path "*/kafka-logs/*" \
-not -path "*/nginx/*" \
\( -name "*.log" -o -name "*.log.*" -o -name "*.gz" \) \
-mtime +$DAYS -delete7.2 如何只清理特定服務(wù)的日志?
修改 LOG_DIR 或添加路徑過濾:
# 只清理特定服務(wù) LOG_DIR="/data/logs/yyzx_testservice_logs" ? # 或使用通配符匹配多個服務(wù) find /data/logs/yyzx_* -type f -name "*.log" -mtime +7 -delete
八、總結(jié)
本方案通過 find + cron 實(shí)現(xiàn)了服務(wù)器日志的自動化清理:
| 項(xiàng)目 | 配置 |
|---|---|
| 清理目錄 | /data/logs |
| 保留天數(shù) | 7 天 |
| 執(zhí)行時間 | 每天 09:00 |
| 清理記錄 | /data/scripts/clean_logs_history.log |
核心優(yōu)勢:
- ? 自動化執(zhí)行,無需人工干預(yù)
- ? 安全限制,避免誤刪重要文件
- ? 操作留痕,便于問題追溯
- ? 配置靈活,易于調(diào)整參數(shù)
以上就是Linux服務(wù)器使用Cron實(shí)現(xiàn)日志自動清理方案的詳細(xì)內(nèi)容,更多關(guān)于Linux Cron日志自動清理的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Ubuntu安裝scrcpy完成手機(jī)投屏和控制(Ubuntu用QQ微信的另一種方法)
這篇文章主要介紹了Ubuntu安裝scrcpy手機(jī)投屏和控制(Ubuntu用QQ微信的另一種方法),這樣的話不用頻繁在鍵盤和手機(jī)間切換了 ,需要的朋友可以參考下2019-10-10
Linux使用fdisk進(jìn)行磁盤的相關(guān)操作
fdisk?命令是?Linux?中用于管理磁盤分區(qū)的強(qiáng)大文本實(shí)用程序,這篇文章主要為大家詳細(xì)介紹了如何使用fdisk進(jìn)行磁盤的相關(guān)操作,需要的可以了解下2025-01-01
ubuntu下安裝Python多版本的方法及注意事項(xiàng)
倒霉的今天我居然把ubuntu系統(tǒng)給完壞了,因?yàn)槲野裵ython3卸載了,然后就哦了,下面小編給大家分享下ubuntu下管理python的多個版本的方法,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看下吧2016-10-10

