天天看點

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程式 + 命名管道的方式

http://blog.chinaunix.net/uid-11121450-id-3177198.html
nginx實作日志按天切割

作者:

zale

出處:

http://www.cnblogs.com/littleatp/

, 如果喜歡我的文章,請

關注我的公衆号

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出

原文連結

 如有問題, 可留言咨詢.

繼續閱讀