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系統Nginx日誌定時清理與分割完整指南

編輯:關於 Linux

Nginx 伺服器在長時間運行後,錯誤日誌與存取日誌檔案會持續增大,若不定期清理,不僅佔用大量磁碟空間,嚴重時甚至會導致 Nginx 服務異常。本文詳細介紹如何在 Linux 系統中透過 Shell 腳本與 Crontab 計劃任務,實現 Nginx 日誌的按天分割與舊日誌自動清理。

核心思路

Nginx 本身不具備自動分割日誌的功能,常見做法是:每天零點將前一天的日誌重新命名備份(如 access_20240115.log),清空當前日誌檔案供 Nginx 繼續寫入;同時刪除超過保留天數(如 7 天或 30 天)的舊日誌檔案。

步驟一:建立日誌分割腳本 clear_log.sh

建立腳本檔案:

vi /usr/local/nginx/clear_log.sh

寫入以下內容(請根據實際 Nginx 日誌路徑調整):

#!/bin/bash
# 設定日誌路徑與備份目錄
LOG_PATH="/usr/local/nginx/logs"
BACKUP_PATH="/var/log/nginx/backup"
DATE_YESTERDAY=$(date -d "yesterday" +"%Y%m%d")

# 建立備份目錄
mkdir -p ${BACKUP_PATH}/access
mkdir -p ${BACKUP_PATH}/error

# 分割 access.log
cp ${LOG_PATH}/access.log ${BACKUP_PATH}/access/access-${DATE_YESTERDAY}.log
cat /dev/null > ${LOG_PATH}/access.log

# 分割 error.log
cp ${LOG_PATH}/error.log ${BACKUP_PATH}/error/error-${DATE_YESTERDAY}.log
cat /dev/null > ${LOG_PATH}/error.log

關鍵點說明:

  • 使用 cat /dev/null > file 清空檔案,比 echo "" > file 更高效且不留換行符。
  • 備份目錄建議與 Nginx 日誌目錄分離,便於管理與備份。
  • 腳本需賦予執行權限:chmod +x /usr/local/nginx/clear_log.sh

步驟二:建立舊日誌清理腳本 dellog.sh

vi /usr/local/nginx/dellog.sh
#!/bin/bash
# 刪除 7 天前的備份日誌
find /var/log/nginx/backup/access -mtime +7 -type f -name "*.log" -exec rm -f {} \;
find /var/log/nginx/backup/error -mtime +7 -type f -name "*.log" -exec rm -f {} \;

參數說明:

  • -mtime +7:查找修改時間超過 7 天的檔案。
  • -exec rm -f {} \;:安全刪除找到的檔案,避免參數過長問題。

步驟三:配置 Crontab 定時任務

編輯當前使用者的計劃任務:

crontab -e

加入以下兩行(每天零點執行):

0 0 * * * /usr/local/nginx/clear_log.sh
0 0 * * * /usr/local/nginx/dellog.sh

儲存離開後,可用 crontab -l 驗證。

邏輯驗證範例

假設今天是 3 月 18 日 00:00:

  1. clear_log.sh 將 3 月 17 日的日誌備份為 access_20240317.log、error_20240317.log,並清空當前 access.log、error.log。
  2. dellog.sh 掃描備份目錄,刪除 3 月 11 日以前(含)的舊日誌檔案。

進階建議

  • Logrotate 替代方案: 生產環境建議使用系統自帶的 logrotate 工具,配置更靈活,支援壓縮、郵件通知等功能。
  • 權限注意: 執行腳本的使用者需具備 Nginx 日誌檔案的讀寫權限,通常以 root 或 nginx 使用者身份執行。
  • 磁碟監控: 建議搭配監控系統(如 Zabbix、Prometheus)監控磁碟使用率,預防日誌暴增導致磁碟寫滿。

透過上述步驟,即可實現 Nginx 日誌的自動化分割與清理,保障伺服器長期穩定運行。

Copyright © Windows教程網 All Rights Reserved