nginx日誌按照天進行分割

天府雲創發表於2017-05-18
由於nginx的日誌本身只是支援按照server_name或者大小進行劃分,對於習慣了apache的按照一個網站每天一個日誌的我來說是不可以接受的,於是從網上找了幾個nginx按天分割的方法發現都是互相抄襲的,特別是裡面有一個命令是kill -9 `cat nginx.pid`,需要殺掉nginx子程式,我覺得不靠譜。
我忽然想到我以前在做openstack的雲端儲存開發時,對rsyslog的日誌進行分割的方法,一用果然好用
原理是:
1.從一臺已經安裝好apache的機器上的apache bin目錄下把rotatelogs拷貝到本機的/opt/nginx_logs下

點選(此處)摺疊或開啟

  1. mkdir -p /opt/nginx_logs
  2. cp rotatelogs /opt/nginx_logs/
  3. chmod +x /opt/nginx_logs/rotatelogs
2.建立有名管道

點選(此處)摺疊或開啟

  1. mkdir /opt/nginx_logs/abc_www/
  2. mkfifo /opt/nginx_logs/abc_www/access_log
3.在nginx配置檔案server中加上

點選(此處)摺疊或開啟

  1. access_log /opt/nginx_logs/abc_www/access_log;
4.建立日誌目錄

點選(此處)摺疊或開啟

  1. mkdir /opt/nginx_logs/abc_www/log/
5.建立日誌分割指令碼

點選(此處)摺疊或開啟

  1. [root@localhost nginx_logs]# cat /opt/nginx_logs/abc_www/rotate.sh
  2. baselogdir=/opt/nginx_logs/abc_www
  3. rotatelogs=/opt/nginx_logs/rotatelogs
  4. while [ 1 ]
  5. do
  6. echo `date +"%F %T"`" rotatelogs access start"
  7. $rotatelogs $baselogdir/log/access_%Y%m%d.log 86400 480 < $baselogdir/access_log
  8. echo `date +"%F %T"`" rotatelogs access stop"
  9. sleep 1;
  10. done
6.建立啟動日誌分割指令碼

點選(此處)摺疊或開啟

  1. [root@localhost nginx_logs]# cat /opt/nginx_logs/abc_www/run.sh
  2. sh /opt/nginx_logs/abc_www/rotate.sh >> /opt/nginx_logs/abc_www/log/access-rotate.log 2>&1 &
7.最終效果

相關文章