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)的日誌文件。

    不過使用上述腳本前必須首先將Nginx的日誌文件按照最開始的說的方法進行自動分割,否則會刪除正在寫入的日誌文件了。

    最後將腳本保存並使用chmod +x 命令指定可執行權限,加入任務列表中(每天凌晨一點執行)。

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章