nginx的日誌文件沒有rotate功能。如果你不處理,日誌文件將變得越來越大,還好我們可以寫一個nginx日誌切割腳本來自動切割日誌文件。
第一步就是重命名日誌文件,不用擔心重命名後nginx找不到日誌文件而丟失日誌。在你未重新打開原名字的日誌文件前,nginx還是會向你重命名的文件寫日誌,linux是靠文件描述符而不是文件名定位文件。
第二步向nginx主進程發送USR1信號。
nginx主進程接到信號後會從配置文件中讀取日誌文件名稱,重新打開日誌文件(以配置文件中的日誌名稱命名),並以工作進程的用戶作爲日誌文件的所有者。
重新打開日誌文件後,nginx主進程會關閉重名的日誌文件並通知工作進程使用新打開的日誌文件。
工作進程立刻打開新的日誌文件並關閉重名名的日誌文件。
然後你就可以處理舊的日誌文件了。
nginx日誌按日期自動切割腳本如下:
#nginx日誌切割腳本
#author: wz
#!/bin/bash
logs_path="/opt/logs/"
pid_path="/opt/run/nginx.pid"
#重命名日誌文件
mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday"+"%Y%m%d").log
#向nginx主進程發信號重新打開日誌
kill -USR1 `cat ${pid_path}`
crontab 設置作業
0 0 * * * (/bin/bash /opt/nginx/sbin/cut_nginx_log.sh)>/dev/null 2>&1
這樣就每天的0點0分把nginx日誌重命名爲日期格式,並重新生成今天的新日誌文件