天天看點

Nginx日志自動切割及删除

    Nginx預設沒有日志自動切割功能。而如果不對日志檔案進行處理,日志檔案将變得越來越大,是以我們需要寫一個Nginx日志切割腳本來自動切割日志檔案。

第一步: 重命名日志檔案。

    不用擔心重命名後Nginx找不到日志檔案而丢失日志。在你未重新打開原名字的日志檔案前,nginx還是會向你重命名的檔案寫日志,linux是靠檔案描述符而不是檔案名定位檔案。

第二步:向Nginx主程序發送USR1信号。

    Nginx主程序接到信号後會從配置檔案中讀取日志檔案名稱,重新打開日志檔案(以配置檔案中的日志名稱命名),并以工作程序的使用者作為日志檔案的所有者。

    重新打開日志檔案後,Nginx主程序會關閉重名的日志檔案并通知工作程序使用新打開的日志檔案。

    工作程序立刻打開新的日志檔案并關閉重名名的日志檔案。然後你就可以處理舊的日志檔案了。

nginx日志按日期自動切割腳本如下:

#nginx日志切割腳本
#author: http://www.xlogin.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}`      

    儲存以上腳本到/usr/local/nginx,命名為nginx_log.sh

crontab 設定作業:

0 0 * * * bash /usr/local/nginx/nginx_log.sh      

     這樣就每天的0點0分把nginx日志重命名為日期格式,并重新生成今天的新日志檔案。

    但是時間長了之後,Nginx的日志檔案累積的太多,最後就會充滿了整個磁盤空間,是以必須做一個可以定期自動删除的腳本。

#!/bin/bashfind /usr/local/nginx/logs/ -mtime +15 -type f -name *.log | xargs rm -f      

     上述腳本是将/usr/local/nginx/logs目錄下面的15天之前的日志檔案删除,也可以參考上面的腳本删除其他程式(如PHP、Tomcat)的日志檔案。

[root@localhost ~]# crontab -l
00 01 * * * /bin/bash /root/shell/autodellogs.sh
[root@localhost ~]# service crond restart      

繼續閱讀