Nginx 日志切片(windows/linux)

Nginx 默认不采用日志切片进行日志保存,这样就有一个弊端:日志文件都放在同一个文件中,长时间运行后日志文件很大,可能达到几个G,甚至十几个G大小,查看起来很不方便。为了解决这个问题就需要进行日志切片,如每小时或者每天的日志放在一个单独的文件中。怎么实现呢?windows 系统可通过简单的配置实现按日期存储,linux 的总体思路是:设置一个定时任务,每隔一段时间将日志文件备份后,告诉nginx 重新打开日志文件。

一、windows 按日期日志切片

server {

    .......

    if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") {
		set $year $1;
		set $month $2;
		set $day $3;
	}
		 
	access_log logs/$year-$month-$day-access.log;

    ......

}

二、linux 日志切片

1、新建shell脚本:

vi   /opt/nginx/nginx_log.sh
#!/bin/bash
## 零点执行该脚本
## nginx.pid所在目录
declare PID_PATH="/usr/local/nginx/logs/nginx.pid"
## Nginx 日志文件所在的目录
declare LOGS_PATH="/usr/local/nginx/logs"
## 获取昨天的 yyyy-MM-dd
declare YESTERDAY=$(date -d last-day +%Y%m%d)
## 删除7天之前的日志
rm -rf ${LOGS_PATH}/access_$(date -d "7 days ago" "+%Y%m%d").log
## 执行mv操作
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
## 向 Nginx 主进程发送 USR1 信号。USR1 信号是重新打开日志文件
kill -USR1 `cat ${PID_PATH}`

2、授权执行 chmod 777 nginx_log.sh

3、./ nginx_log.sh 执行脚本若提示如下

原因可能是 文件的格式是dos,修改为unix,具体操作步骤如下

  • 查看文件格式  用vim 打开出错的文件    按 ESC键     再按shift+冒号   输入 set  ff  回车   可以看见 该文件的格式 fileformat=dos
  • 按shift + 冒号  输入  set ff=unix 回车 发现没反应,那就对了。 
  • 可以按 shift + 冒号  set ff 查看  fileformat=unix 

4、创建定时任务执行,执行命令crontab -e添加如下作业(每天凌晨执行)

0 0 * * * ./opt/nginx/nginx_log.sh

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值