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 計划任務,每天凌晨執行一次。