nginx實現日志按天切割


背景

    nginx的日志文件沒有rotate功能。一段時間過后,日志將越發臃腫,一個accesslog很快就突破1G,因此有必要通過腳本實現按天切割日志。

 

解決思路

1  重命名日志文件,如更改為access_yyyyMMdd.log,需注意的是nginx通過文件描述符定位日志文件,因此在重命名之后還是能往該文件內寫入內容。

 

2  向nginx主進程發送USR1信號。

    nginx的master進程接到信號后:

    重新從配置文件中讀取日志文件名 -> 關閉重名日志文件 -> 創建並打開日志文件(原來的名稱) -> 通過worker進程作出改變

 

代碼實現

A. nginx日志按日期自動切割腳本

#author: http://www.nginx.cn
#!/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}

保存為 cut-log.sh,

 

B. 設置定時任務 "crontab -e"

0 0 * * * bash /usr/local/nginx/nginx_log.sh

 

將於每天凌晨0點0分將nginx日志重命名為昨天的日期格式,並重新生成今天的新日志

 

 

其他實現

通過apache的rotate程序 + 命名管道的方式

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM