Nginx日志切割
很久之前做nginx日志文件的切割,通过脚本方式完成,最近在配置nginx日志文件切割的时候,发现logrotate方式更古老和优雅,记录下:
创建配置文件
创建/etc/logrotate.d/nginx文件,内容如下:
/usr/local/bin/nginx/logs/*.log {
daily
missingok
rotate 365
compress
delaycompress
notifempty
create 0640 root root
sharedscripts
dateext
dateformat -%Y%m%d
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
配置说明
- /usr/local/bin/nginx/logs/*.log 指定 Nginx 日志文件的路径
- daily: 指定日志文件的旋转频率为每日。
- missingok: 如果日志文件丢失,不会显示错误信息。
- rotate 365: 保留最近 365个旋转日志文件,超过这个数量的旧日志文件将被删除。
- compress: 通过 gzip 压缩旋转的日志文件。
- delaycompress: 延迟到下一个日志旋转周期才压缩日志文件。这防止在日志旋转和压缩的同一天压缩文件。
- notifempty: 如果日志文件为空,则不旋转。
- create 0640 nginx adm: 在日志旋转后使用指定的权限创建新的日志文件,并设置所有者为 nginx,组为 adm。
- sharedscripts: 如果有多个日志文件匹配模式,postrotate 脚本只会运行一次。
- dateext: 使用此选项后,logrotate 会在旋转后的日志文件名中添加日期后缀。
- dateformat: 指定日期格式。-%Y%m%d 表示日期格式为 YYYYMMDD。例如,如果切割日期为 2024 年 7 月 1 日,切割后的文件名将包含 -20240701。
- postrotate … endscript: 在日志旋转后运行的脚本。在这里,它发送 USR1 信号到 Nginx 主进程以便 Nginx 重新打开日志文件。
测试配置正确性
logrotate -d /etc/logrotate.d/datatrans.nginx
手工进行切割
logrotate -f /etc/logrotate.d/datatrans.nginx
看看其他吧