預設情況下,Nginx 的訪問日誌儲存在一個檔案裡。時間久了日誌內容變得異常龐大。不利於記錄檔的歸檔備份及分析。可以通過每天定時執行指令碼來達到自動切割日誌的目的,達到每天的訪問日誌儲存在一個單獨檔案內。
為了切割日誌,首先需要將已存在的日誌重新命名(預設訪問日誌為 access.log ,重新命名為當天的日期),然後向 Nginx 的 master 進程發送 USR1 訊號來使進程重新開啟所有記錄檔並設定記錄檔的屬主為 work 進程啟動並執行使用者,(此時由於 access.log 已被重新命名 所以進程會新建立一個 access.log 並將屬主改為 work 進程啟動並執行使用者,來記錄新的訪問日誌)。當記錄檔重新開啟成功後,master 會關閉所有開啟的記錄檔,並通知 work 進程重新開啟記錄檔。work 進程以正確的方式關閉之前的記錄檔,並使用新的記錄檔記錄。
未進行切割之前:
[root@lnmp www]# du -h access.log
12M access.log
[root@lnmp www]# head -n 1 access.log
120.27.47.* - - [25/Sep/2015:10:35:31 +0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)" "-"
[root@lnmp www]# tail -n 1 access.log
112.126.75.* - - [29/Sep/2015:12:06:54 +0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)" "-"
[root@lnmp www]#
使用指令碼重新命名記錄檔,並發送 USR1 訊號給 Nginx master 進程。然後將指令碼加入定時任務:
Nginx master 進程號檔案儲存位置:
[root@lnmp scripts]# grep pid /application/nginx/conf/nginx.conf
pid logs/nginx.pid;
[root@lnmp scripts]# cat /application/nginx/logs/nginx.pid
7039
[root@lnmp scripts]#
設定檔中訪問日誌儲存路徑及檔案名稱:
[root@lnmp scripts]# grep access /application/nginx/conf/website/www.conf
access_log /data/logs/website/www/access.log main;
[root@lnmp scripts]
指令碼:
[root@lnmp scripts]# cat rotate-nginx-logs.sh
#!/bin/bash
# Rotate nginx logs
# Nginx pid file : /application/nginx/logs/nginx.pid
# Nginx logs directory : /data/logs/website/www
# Default log name : access.log
# Author : Mr.Zhou
NGX_PID=/application/nginx/logs/nginx.pid
LOGS_DIR=/data/logs/website/www
LOG_NAME=access.log
cd $LOGS_DIR &&
/usr/bin/rename $LOG_NAME $(/bin/date +%F -d 'yesterday').$LOG_NAME $LOG_NAME &&
/bin/kill -USR1 $(cat $NGX_PID)
[root@lnmp scripts]#
將指令碼加入到定時任務,每天零點執行:
[root@lnmp scripts]# crontab -l
# rotate nginx log everyday
00 00 * * * /bin/bash /application/scripts/rotate-nginx-logs.sh &>/dev/null
[root@lnmp scripts]#
定時任務自動執行切割指令碼後:
[root@lnmp www]# ls
2015-09-29.access.log access.log
[root@lnmp www]# tail -n 1 2015-09-29.access.log
112.126.75.174 - - [29/Sep/2015:23:59:54 +0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)" "-"
[root@lnmp www]# head -n 1 access.log
45.119.97.12 - - [30/Sep/2015:00:00:31 +0800] "POST /wp-cron.php?doing_wp_cron=1443542431.7503929138183593750000 HTTP/1.0" 200 0 "-" "WordPress/4.3.1; http://www.111cn.net" "-"
[root@lnmp www]#