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 计划任务,每天凌晨执行一次。