主题
logrotate 日志轮转
logrotate 是 Linux 系统中用于自动管理日志文件的工具,可根据设定的策略定期轮转、压缩、删除旧日志,保障系统稳定运行。
工作原理
logrotate 会按照指定规则对日志文件进行操作,包括:
- 创建新日志文件
- 将旧日志重命名、压缩归档
- 保留一定数量的历史日志
- 可结合定时任务每日自动运行
系统默认通过 cron.daily 计划任务定期执行 /etc/cron.daily/logrotate。
配置文件结构
主配置文件:
/etc/logrotate.conf
包含全局设置和include /etc/logrotate.d引用单独服务配置目录:
/etc/logrotate.d/
每个服务对应一个配置文件,如 nginx、rsyslog 等
配置示例
以下为 /etc/logrotate.d/nginx 示例:
txt
/var/log/nginx/*.log {
daily # 每日轮转
rotate 7 # 保留7份旧日志
compress # 使用 gzip 压缩
delaycompress # 压缩前保留1份未压缩日志
missingok # 忽略不存在的日志文件
notifempty # 忽略空日志文件
create 0640 nginx adm # 轮转后新建日志文件权限与所有者
sharedscripts
postrotate
[ -f /run/nginx.pid ] && kill -USR1 `cat /run/nginx.pid`
endscript
}常用参数说明
daily|weekly|monthly:轮转周期rotate N:最多保留 N 个旧日志文件compress:轮转后压缩旧日志(.gz)missingok:日志不存在时不报错notifempty:空日志文件不轮转create MODE OWNER GROUP:创建新日志时的权限与所有者postrotate/endscript:日志轮转后执行的命令
手动执行与调试
手动执行日志轮转:
bashsudo logrotate /etc/logrotate.conf强制执行(即使未到轮转时间):
bashsudo logrotate -f /etc/logrotate.conf
管理建议
定期检查日志目录磁盘占用情况:
bashdu -sh /var/log/*配置日志轮转时避免轮转正在使用的文件,需配合服务 reload 或信号处理(如 nginx、rsyslog)。
合理使用 logrotate,可以有效管理系统和服务日志文件,防止日志爆满磁盘,提高系统可维护性。
