文章最后更新时间:2025年06月11日
生产环境需求
- 每日切割Nginx日志,以时间戳命名保存
- 按月份归档日志,每个月的日志存放在独立文件夹
脚本实现步骤
1、创建日志存储目录
mkdir access_log
2、编写日志切割脚本
[root@WEB logs]# cat cut_nginx_log.sh
#!/bin/bash
# 定义变量
dtime=$(date '+%Y%m') # 年月文件夹名
date=$(date '+%Y%m%d') # 日志备份文件名
backpath=/usr/local/nginx/logs/access_log/$dtime/$date # 备份路径
logpath=/usr/local/nginx/logs/access.log # 原始日志路径
# 检查月度文件夹是否存在,不存在则创建
if [ ! -d "/usr/local/nginx/logs/access_log/$dtime" ]; then
mkdir -p /usr/local/nginx/logs/access_log/$dtime
fi
# 移动日志文件并触发Nginx重读日志
mv $logpath $backpath
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
核心原理说明
kill -USR1 $(cat nginx.pid)
:向Nginx主进程发送USR1
信号,触发日志重读与切割- 若缺少此命令,Nginx会继续向已备份的日志文件写入数据,新文件无内容
3、配置定时任务(crontab)
crontab -e
- 示例定时任务:
0 0 * * * /usr/local/nginx/logs/cut_nginx_log.sh
(每天0点执行日志切割脚本)
优化建议
- 日志压缩:在脚本中添加压缩逻辑,减少存储空间
gzip $backpath # 压缩备份的日志文件
- 过期清理:添加月度日志清理逻辑,避免磁盘爆满
# 清理3个月前的日志 find /usr/local/nginx/logs/access_log -type d -mtime +90 -exec rm -rf {} \;
- 权限控制:确保脚本和日志目录有正确的读写权限
chmod +x cut_nginx_log.sh # 赋予脚本执行权限
文章版权声明:除非注明,否则均为柳三千运维录原创文章,转载或复制请以超链接形式并注明出处。