linux将访问日志切成每天,最简单自动切割 nginx 访问日志示例
網站上線后,沒怎么注意過日志,有一天需要查日志時,才發現竟然有 100?多個 G,一個文本文件竟然有 100 多個G,這也太大了。
nginx 是一個非常輕量的 web 服務器,體積小、性能高、速度快等諸多優點。但不足的是也存在缺點,比如其產生的訪問日志文件一直就是一個,不會自動地進行切割,如果訪問量很大的話,將導致日志文件容量非常大,不便于管理。當然了,我們也不希望看到這么龐大的一個訪問日志文件,那需要手動對這個文件進行切割。
整體思路:
由于 nginx?的日志,都是寫在一個文件中的,具體由我們的 nginx.conf?配置文件來決定,比如 access.log,那么我們可以在每天晚上 12 點,也就是每天0點,把這個 access.log?文件,重新命名一下,比如命令為 access_2017-11-22.log,之后再讓 nginx?重新寫一個 access.log?文件,這樣就可以達到每天一個日志文件,之后再想去查找,或管理,也方便很多啦。
具體實現:
整個操作只涉及到了?重命名文件,以及讓 nginx?重新打開一下日志文件,所以可以簡單的來講一個 shell?腳本來實現,再結合 linux crontab?計劃任務,讓腳本在每天零點執行即可。
腳本如下:
cat /usr/local/nginx/sbin/cut_nginx_logs.sh
#!/bin/bash
#指定 nginx?日志文件路徑
Logs_Path=/usr/local/nginx/logs
#獲取昨天的日期
Yesterday=$(date -d"yesterday" +%Y-%m-%d)
#重命名日志文件
mv ${Logs_Path}/access.log ${Logs_Path}/access_${Yesterday}.log
#給nginx?進程發送指令,重新打開日志文件
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
PS: kill?命令必須要有,如果 nginx?沒有重新打開日志文件,則不會向新的文件寫入日志,還會繼續向原來的日志文件寫入。
contab 設置:
contab -e
0 0 * * * /bin/bash /usr/local/nginx/sbin/cut_nginx_log.sh
PS:具體周期可自行調整?腳本中的?date?命令和 crontab,比如,兩天,一周,一個月等
總結
以上是生活随笔為你收集整理的linux将访问日志切成每天,最简单自动切割 nginx 访问日志示例的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: skywalking(1) 基于open
 - 下一篇: 回头看看NSURLConnection