nginx 日志分割

Linux系统

#nginx日志切割脚本

#!/bin/bash

#设置日志文件存放目录
logs_path="/usr/local/nginx/logs/"

#设置pid文件
pid_path="/usr/local/nginx/nginx.pid"

#重命名日志文件
mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").log

#向nginx主进程发信号重新打开日志
kill -USR1 `cat ${pid_path}`

 

 

 

windows系统

nginx的日志都写在一个文件里,这个文件越来越大

写一个bat脚本,按天来分割日志

原理:每天凌晨将nginx日志  重命名为 access-日期.txt

然后调用nginx -s  reopen 命令重新打开日志文件

log.bat   如下

@echo off

set name=access-%date%
move access.log %name%.log

nginx -s  reopen

 

 

我们可以简单的把日志文件mv走,但是你会发现mv走后新的日志文件没有重新生成,

一般linux下用的文件句柄,文件被打开情况下你mv走文件,但是原来操作这个文件的进程还是有这个文件的inode等信息,

原进程还是读写原来的文件,因此简单的mv是无法生效的。

 

因此建议过程如下

1. mv原文件到新文件目录中,这个时候 nginx还写这个文件(写入新位置文件中了)

2. 调用nginx -s  reopen用来打开日志文件,这样nginx会把新日志信息写入重新打开的日志

(重新打开的日志就是配置文件中设置的位置和名称)

这样完成了日志的切割工作, 同时切割过程中没有日志的丢失。

 

 

然后将这个bat文件加入windows 计划任务,每天凌晨执行一次。

posted @ 2018-11-09 16:14  乌托邦眺望  阅读(2896)  评论(0编辑  收藏  举报