Nginx 日誌切割的shell指令碼

來源:互聯網
上載者:User

  預設情況下,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]#

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.