Nginx 日志切割是指定期将 Nginx 的访问日志和错误日志分割成多个文件,以便于管理和分析。日志切割有助于防止日志文件过大,影响服务器性能,并且便于进行日志归档和分析。
logrotate
工具logrotate
是一个常用的日志管理工具,可以配置自动切割 Nginx 日志。
配置示例:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
解释:
daily
:每天切割一次。rotate 14
:保留最近14天的日志文件。compress
:压缩旧的日志文件。create 0640 www-data adm
:创建新日志文件时设置权限和所有者。postrotate
:切割后重新加载 Nginx 配置。也可以编写自定义脚本来实现日志切割。
示例脚本:
#!/bin/bash
LOG_DIR="/var/log/nginx"
LOG_FILE="access.log"
MAX_SIZE=10485760 # 10MB
cd $LOG_DIR
if [ -f $LOG_FILE ] && [ $(du -m $LOG_FILE | cut -f1) -gt $MAX_SIZE ]; then
TIMESTAMP=$(date +%Y%m%d%H%M%S)
mv $LOG_FILE ${LOG_FILE}_${TIMESTAMP}
touch $LOG_FILE
kill -USR1 $(cat /var/run/nginx.pid)
fi
解释:
原因:Nginx 进程可能没有正确重新打开日志文件。
解决方法:
postrotate
脚本中发送了正确的信号(如 USR1)给 Nginx 进程。原因:切割后的日志文件权限设置不正确,导致 Nginx 无法写入。
解决方法:
logrotate
配置中使用 create
选项设置正确的权限和所有者。通过以上方法,可以有效实现 Nginx 日志切割,并解决常见的问题。
领取专属 10元无门槛券
手把手带您无忧上云