背景
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
作者:
zale出處:
http://www.cnblogs.com/littleatp/, 如果喜歡我的文章,請
關注我的公衆号本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出
原文連結如有問題, 可留言咨詢.