Nginx日志定期清理設置實現
更新時間:2025年12月05日 10:38:26 作者:宥鈞
本文主要介紹了Nginx日志定期清理設置實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
1. 日志輪轉配置
① 創(chuàng)建 logrotate 配置文件
a. 按天自動滾動清理
sudo tee /etc/logrotate.d/docker-nginx <<'EOF'
/path/to/your/mount_data/nginx/logs/*.log {
daily # 每天輪轉
rotate 30 # 保留30天日志
compress # 壓縮舊日志
delaycompress # 延遲壓縮(僅壓縮上一個輪轉文件)
missingok # 日志不存在時不報錯
notifempty # 空文件不輪轉
create 0640 101 101 # 權限和用戶(Nginx容器默認UID=101)或使用用戶 root root
sharedscripts # 所有日志處理完后執(zhí)行腳本
postrotate
# 向容器發(fā)送USR1信號,通知Nginx重新打開日志文件
docker kill -s USR1 disys-frontend-dev 2>/dev/null || true
endscript
}
EOF
b. 按文件大小自動滾動清理
sudo tee /etc/logrotate.d/docker-nginx <<'EOF'
/var/ai_disys/microservice-backend/mount_data/nginx/logs/*.log {
size 100M # 關鍵參數:日志達到100MB時觸發(fā)輪轉
rotate 10 # 保留10個歸檔版本
compress # 啟用gzip壓縮
delaycompress # 延遲壓縮上一個輪轉文件
missingok # 日志不存在時不報錯
notifempty # 空文件不輪轉
create 0640 101 101 # 權限和用戶(Nginx容器默認UID=101)
sharedscripts # 所有日志處理完后執(zhí)行腳本
postrotate
# 向容器發(fā)送USR1信號,通知Nginx重新打開日志文件
docker kill -s USR1 disys-frontend-dev 2>/dev/null || true
endscript
}
EOF
關鍵參數說明:
size 100M:可替換daily實現按大小輪轉(如size 100M+rotate 10)dateext:添加日期后綴(如access.log-20230915.gz)compress:使用gzip壓縮舊日志
② 設置目錄權限
sudo chown -R 101:101 /path/to/mount_data/nginx/logs/ sudo chmod -R 755 /path/to/mount_data/nginx/logs/
③ 手動測試配置
# 生成測試日志(100MB) dd if=/dev/zero bs=1M count=100 >> /path/to/mount_data/nginx/logs/access.log # 強制觸發(fā)輪轉 sudo logrotate -vf /etc/logrotate.d/docker-nginx # 驗證結果 ls -lh /var/ai_disys/microservice-backend/mount_data/nginx/logs/
2. 日志備份方案
① 定期壓縮備份到其他目錄
sudo tee /usr/local/bin/nginx-log-backup <<'EOF'
#!/bin/bash
BACKUP_DIR="/var/backups/nginx_logs"
mkdir -p $BACKUP_DIR
find /path/to/mount_data/nginx/logs/ -name "*.log.*" -mtime +7 -exec gzip {} \;
rsync -avz /path/to/mount_data/nginx/logs/*.gz $BACKUP_DIR/
EOF
sudo chmod +x /usr/local/bin/nginx-log-backup
② 添加定時任務(每天凌晨執(zhí)行)
(crontab -l 2>/dev/null; echo "0 3 * * * /usr/local/bin/nginx-log-backup") | crontab -
3. 高級功能擴展
① 按小時輪轉(高頻日志場景)
# 修改/etc/logrotate.d/docker-nginx hourly rotate 168 # 保留7天(24*7)
② 日志上傳到云存儲
# 在備份腳本中添加(示例:AWS S3) aws s3 sync $BACKUP_DIR s3://your-bucket/nginx_logs/$(date +%Y%m%d)/
③ 日志分析報警
# 示例:檢測錯誤日志并報警 grep -i "error" /path/to/mount_data/nginx/logs/error.log | mail -s "Nginx Error Alert" admin@example.com
常見問題解決方案
| 問題現象 | 原因 | 修復命令 |
|---|---|---|
| 輪轉后無新日志 | Nginx未接收USR1信號 | docker kill -s USR1 disys-frontend-dev |
| 權限錯誤 | 目錄屬主錯誤 | sudo chown -R 101:101 /path/to/logs |
| 日志未壓縮 | gzip未安裝 | sudo apt-get install gzip |
| 備份失敗 | 磁盤空間不足 | df -h && rsync --delete-during |
到此這篇關于Nginx日志定期清理設置實現的文章就介紹到這了,更多相關Nginx日志定期清理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:
相關文章
Nginx 遇到502 Bad Gateway 自動重啟的腳本代碼
放到crontab里一分鐘執(zhí)行一次。url和cmd根據自己的改。2010-12-12

