# Linux的logrotate怎么使用
## 一、logrotate簡介
### 1.1 什么是logrotate
logrotate是Linux系統自帶的日志輪替工具,用于自動輪轉、壓縮、刪除和郵寄日志文件。它可以有效解決日志文件不斷增長導致的磁盤空間問題,是系統管理員維護日志文件的利器。
### 1.2 主要功能特性
- **自動輪轉**:按時間或大小條件觸發日志輪轉
- **壓縮歸檔**:使用gzip/bzip2等壓縮歷史日志
- **日志清理**:按保留策略刪除舊日志
- **郵件通知**:可將輪轉后的日志發送到指定郵箱
- **自定義執行**:支持預執行和后執行腳本
### 1.3 典型應用場景
- Web服務器日志管理(Nginx/Apache)
- 系統日志管理(/var/log/目錄)
- 應用服務日志管理(MySQL/Redis等)
- 自定義應用程序日志管理
## 二、安裝與基本配置
### 2.1 安裝logrotate
大多數Linux發行版已預裝logrotate,如需手動安裝:
```bash
# Debian/Ubuntu
sudo apt install logrotate
# RHEL/CentOS
sudo yum install logrotate
# 驗證安裝
logrotate --version
logrotate采用分層配置結構:
/etc/logrotate.conf # 主配置文件
/etc/logrotate.d/ # 應用配置目錄
/usr/sbin/logrotate # 主程序位置
/var/lib/logrotate.status # 狀態記錄文件
查看默認配置/etc/logrotate.conf:
weekly # 默認每周輪轉一次
rotate 4 # 保留4個歷史日志
create # 輪轉后創建新文件
dateext # 使用日期作為后綴
compress # 啟用壓縮
include /etc/logrotate.d # 包含子配置
每個日志配置塊格式如下:
日志文件路徑 {
配置指令1
配置指令2
...
}
daily/weekly/monthly/yearly:輪轉時間間隔size 100M:日志達到指定大小時輪轉maxsize 100M:與時間條件配合使用missingok:日志不存在時不報錯notifempty:空日志不輪轉compress:使用gzip壓縮delaycompress:延遲壓縮前一個日志rotate 5:保留5個歷史版本maxage 30:刪除超過30天的日志minsize 1M:日志大于1M才輪轉create 0640 root adm:設置新日志權限nocreate:不自動創建新日志prerotate
# 輪轉前執行的命令
/usr/bin/systemctl reload rsyslog >/dev/null 2>&1 || true
endscript
postrotate
# 輪轉后執行的命令
/usr/bin/killall -HUP syslogd
endscript
sharedscripts:多個日志共享腳本olddir /var/log/archive:指定歷史日志目錄dateformat -%Y%m%d:自定義日期格式/etc/logrotate.d/syslog典型配置:
/var/log/syslog
{
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0640 syslog adm
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
/etc/logrotate.d/nginx示例:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
為Java應用配置日志輪轉:
/opt/myapp/logs/*.log {
size 100M
missingok
rotate 10
compress
notifempty
copytruncate
dateext
dateformat -%Y%m%d.%s
}
使用調試模式測試配置:
# 測試配置但不實際執行
logrotate -d /etc/logrotate.conf
# 強制立即執行輪轉
logrotate -vf /etc/logrotate.d/nginx
# 執行所有配置
logrotate /etc/logrotate.conf
# 執行單個配置
logrotate /etc/logrotate.d/nginx
/var/lib/logrotate.status記錄上次輪轉時間:
logrotate state -- version 2
"/var/log/nginx/access.log" 2023-8-1-10:0:0
"/var/log/syslog" 2023-8-2-0:0:0
檢查要點: 1. 配置文件語法是否正確 2. 日志文件路徑是否匹配 3. 輪轉條件是否滿足
確保: 1. logrotate有讀取日志的權限 2. 有目標目錄寫入權限 3. postrotate腳本有執行權限
logrotate通過cron每日運行:
# /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
如需更頻繁的輪轉(如每小時):
/etc/cron.hourly/logrotate文件#!/bin/bash
/usr/sbin/logrotate /etc/logrotate.hourly.conf
| 特性 | logrotate | journald |
|---|---|---|
| 存儲格式 | 文本文件 | 二進制 |
| 輪轉機制 | 外部工具 | 內置 |
| 查詢能力 | 有限 | 強大 |
| 資源占用 | 低 | 較高 |
logrotate作為Linux系統的日志管理標準工具,通過合理的配置可以: - 自動化日志輪轉流程 - 有效控制日志文件大小 - 優化存儲空間利用率 - 保持日志可管理性
掌握logrotate的使用是每個Linux系統管理員的基本技能,本文詳細介紹了從基礎配置到高級應用的各個方面,讀者可根據實際需求靈活運用這些知識來管理各類系統和服務日志。
注意:實際部署時應根據具體業務需求調整參數,建議先在測試環境驗證配置效果。 “`
本文共計約4350字,涵蓋了logrotate的安裝配置、語法詳解、實戰示例、高級技巧等方面內容,采用Markdown格式編寫,可直接用于文檔發布或知識庫建設。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。