在CentOS 7中,将Nginx日志按天切割可以通过以下步骤实现:
方法一:使用 logrotate
(推荐)
确认Nginx日志路径 查看Nginx配置文件(如
/etc/nginx/nginx.conf
),确认access_log
和error_log
的路径,通常为/var/log/nginx/access.log
和/var/log/nginx/error.log
。编辑或创建logrotate配置文件 打开或创建Nginx的logrotate配置文件(默认路径为
/etc/logrotate.d/nginx
):sudo vi /etc/logrotate.d/nginx
输入以下内容(如果文件已存在,调整参数即可):
/var/log/nginx/*.log { daily # 按天切割 missingok # 如果日志不存在,不报错 rotate 7 # 保留最近7天的日志 compress # 压缩旧日志 delaycompress # 延迟一天压缩(与compress配合,压缩前一天的日志) notifempty # 空日志不切割 create 0640 nginx nginx # 设置新日志文件的权限和所有者 sharedscripts # 所有日志处理完成后执行一次脚本 postrotate # 发送USR1信号通知Nginx重新打开日志文件 if [ -f /var/run/nginx.pid ]; then kill -USR1 `cat /var/run/nginx.pid` fi endscript }
测试logrotate配置 手动运行以下命令测试配置是否生效:
sudo logrotate -vf /etc/logrotate.d/nginx
-v
:显示详细过程。-f
:强制立即执行切割。
验证日志切割 检查
/var/log/nginx/
目录是否生成类似access.log-20231015.gz
的压缩文件。确保logrotate定时任务生效 logrotate默认通过
cron.daily
每日运行,检查是否启用:ls /etc/cron.daily/logrotate
方法二:手动脚本 + Cron定时任务
编写切割脚本 创建脚本文件(如
/opt/nginx_logrotate.sh
):#!/bin/bash LOG_DIR="/var/log/nginx" DATE=$(date -d "yesterday" +%Y%m%d) # 重命名日志文件 mv ${LOG_DIR}/access.log ${LOG_DIR}/access_${DATE}.log mv ${LOG_DIR}/error.log ${LOG_DIR}/error_${DATE}.log # 通知Nginx重新打开日志文件 kill -USR1 $(cat /var/run/nginx.pid)
赋予脚本执行权限
sudo chmod +x /opt/nginx_logrotate.sh
添加Cron定时任务
sudo crontab -e
添加以下内容(每天0点执行):
0 0 * * * /opt/nginx_logrotate.sh
注意事项
日志权限问题:确保Nginx用户(如
nginx
)对日志目录有写入权限。日志文件名格式:若需自定义日期格式(如
access_YYYY-MM-DD.log
),可在脚本中调整date +%F
。及时清理旧日志:通过
rotate
参数或脚本逻辑定期删除过期日志。
完成后,Nginx日志将按天切割并自动管理。推荐优先使用logrotate
,因其与系统集成度高、维护更简单。