Logrotate配置nginx日志切割
一、Logrotate介绍
logrotate是Linux系统下的一个日志管理工具,用于简化系统日志文件的管理。它可以自动对日志文件进行轮转、压缩、删除和邮件通知等操作,根据时间或文件大小触发处理,防止日志文件过大。通过配置文件设置规则,通常由cron定时任务触发执行。
二、配置详解
1.主配置文件
[root@test etc]# vim /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d # 自定义的日志轮转配置都放在这里,本次以nginx为例
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
2.创建nginx轮转配置
[root@test etc]# cd /etc/logrotate.d/
[root@test logrotate.d]# vim nginx
/opt/web_app/nginx-1.16.1/logs/*.log {
daily
missingok
# size 100M
rotate 14
dateyesterday
dateformat -%Y-%m-%d-%s
compress
delaycompress
notifempty
create 640 nginx nginx
sharedscripts
postrotate
if [ -f /opt/web_app/nginx-1.16.1/logs/nginx.pid ]; then
kill -USR1 `cat /opt/web_app/nginx-1.16.1/logs/nginx.pid`
fi
endscript
}
3.配置详解
/opt/web_app/nginx-1.16.1/logs/*.log # 想切割的日志绝对路径
daily # 切割时间频率,可选值:daily,weekly,monthly,yearly
missingok # 日志不存在,不报错size 100M # 当日志到达此大小后切割,一般情况下,与时间频率冲突
rotate 14 # 保留过去14天的日志
dateyesterday # 切割完后保存时间是前一天,这个配置在nginx的轮转配置中相当重要
dateformat -%Y-%m-%d-%s # 定义切割日志的后缀
compress # 启用gzip压缩
delaycompress # 下次轮转时压缩文件
notifempty # 空日志文件不切割
create 640 nginx nginx # 创建新文件时的权限、所有者和所属组
sharedscripts # 确保在匹配到多个日志文件时,postrotate脚本只执行一次,这个配置在nginx日志轮转中非常重要,可避免nginx多次重新加载
postrotate # 重新打开日志的脚本
if [ -f /opt/web_app/nginx-1.16.1/logs/nginx.pid ]; then
kill -USR1 `cat /opt/web_app/nginx-1.16.1/logs/nginx.pid`
fi
endscript
4.检查配置文件
[root@test logrotate.d]# logrotate --debug /etc/logrotate.d/nginx
reading config file /etc/logrotate.d/nginx
Allocating hash table for state file, size 15360 B
Handling 1 logs
rotating pattern: /opt/web_app/nginx-1.16.1/logs/*.log after 1 days (14 rotations)
empty log files are not rotated, old logs are removed
considering log /opt/web_app/nginx-1.16.1/logs/access.log
log does not need rotating (log has been rotated at 2026-5-27 11:15, that is not day ago yet)
considering log /opt/web_app/nginx-1.16.1/logs/error.log
log does not need rotating (log has been rotated at 2026-5-27 10:0, that is not day ago yet)
not running postrotate script, since no logs were rotated
上面的检查是没有问题的,现在我们修改一个值,看看错误的是什么样的!
[root@test logrotate.d]# vim nginx
# create 640 nginx nginx
create 840 nginx nginx
# 把640权限改成840,再debug
[root@test logrotate.d]# logrotate --debug /etc/logrotate.d/nginx
reading config file /etc/logrotate.d/nginx
error: /etc/logrotate.d/nginx:12 extra arguments for create
error: found error in /opt/web_app/nginx-1.16.1/logs/*.log , skipping
removing last 1 log configs
Allocating hash table for state file, size 15360 B
Handling 0 logs
# debug提示 文件第12行有错误
三、定时执行
第二部分介绍了logrotate的配置,有了配置之后,就可以执行了,但如何执行呢?
我们可以直接在crontab里面配置精确的执行时间和命令
1.配置crontab
[root@test etc]# vim /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
0 0 * * * root logrotate -f /etc/logrotate.d/nginx
直接写入/etc/crontab配置文件,nginx轮转配置已经放在logrotate下了,而且logrotate会自动周期性执行,那么为什么一定要在crontab里面配置?
2.浅谈anacrontab 和 crontab
anacrontab是周期性补偿调度,适合可能关机或不常运行的设备
crontab 是精确时间点调度器,适合服务器常年开机的场景
简单来说:anacrontab是crontab的补偿方案,anacrontab并不会很准时的执行,如果想在每天0点0分执行切割,那么建议还是选择crontab。
具体区别如下:
| 特性 | crontab |
anacrontab |
|---|---|---|
| 全称 | Cron Table | Anacron Table |
| 设计初衷 | 在确切的时间点执行任务 | 确保任务在指定周期内至少执行一次 |
| 适用场景 | 服务器、24/7 运行的系统 | 笔记本电脑、偶尔关机的桌面系统 |
| 时间精度 | 精确到分钟(如每天 02:00) | 粗略周期(如每 1 天、每 7 天) |
| 是否依赖系统持续运行 | 是(若关机则错过任务) | 否(开机后检查并补执行) |
| 配置文件位置 | /var/spool/cron/ 或 /etc/crontab |
/etc/anacrontab |
| 典型用途 | 备份、日志轮转、监控脚本 | 系统维护、更新检查、清理临时文件 |
※所以需要配置准确时间执行任务时,还是选择crontab配置比较稳妥
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)