问题:nginx会按照nginx.conf的配置生成access.log和error.log,随着访问量的增长,日志文件会越来越大,既会影响访问的速度(写入日志时间延长),也会增加查找日志的难度,nginx没有这种按天或更细粒度生成日志的机制。总共两种方法:1.写脚本,通过定时任务按天重命名日志、重启nginx的方法实现(有重启失败的风险)2.通过工具cronolog实现。推荐方法二,所以只介绍第二个方法。
1.下载安装cronolog
下载地址:链接: https://pan.baidu.com/s/1S-6xFqdSIDipeWRnZXTLcw 密码: gsbo
2.安装
2.1 解压缩
1
| tar zxvf cronolog-1.6.2.tar.gz
|
2.2 进入安装文件所在目录
2.3 运行安装
1 2 3
| ./configure make make install
|
2.4 查看cronolog安装后所在目录(验证安装是否成功)
一般情况下显示为:/usr/local/sbin/cronolog
3.使用cronolog
3.1 创建命名管道
1
| mkfifo /usr/local/nginx/access_log_pipe
|
3.2 配置cronolog,日期按天
如果按小时使用access_%Y-%m-%d-%H.log
;如果按分钟使用access_%Y-%m-%d-%H-%M.log
3.3 修改配置/usr/local/nginx/conf/nginx.conf
1 2 3 4
| ... access_log /usr/local/nginx/access_log_pipe main; error_log /usr/local/nginx/error_log_pipe debug; ...
|
修改完后分别运行nohup命令
1
| nohup cat /usr/local/nginx/access_log_pipe | /usr/local/sbin/cronolog /home/logs/nginx/access/access-%Y-%m-%d.log 2>&1 &
|
1
| nohup cat /usr/local/nginx/error_log_pipe | /usr/local/sbin/cronolog /home/logs/nginx/error/error-%Y-%m-%d.log 2>&1 &
|
3.4 重启nginx
4. 新建sh,删除5天前的,并添加定时任务
1 2 3 4 5
| access_log_path="/home/logs/nginx/access/" error_log_path="/home/logs/nginx/error/" save_days=30 find $access_log_path -mtime +$save_days -name "*.*" -exec rm -rf {} \; find $error_log_path -mtime +$save_days -name "*.*" -exec rm -rf {} \;
|
1 2 3 4
| [root@localhost sh]# crontab -e
#! /bin/bash 00 00 * * * /bin/sh /home/logs/nginx/delete_nginx_logs.sh
|