您好,登錄后才能下訂單哦!
這篇文章主要講解了“nginx 日志怎么定時切割”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“nginx 日志怎么定時切割”吧!
最近有個需求,需要查看我們官網的日活,我是打算通過查看 nginx 日志,對每條日志進行切割,過濾出 ip,然后通過 set 集合去重,查看集合 set 的長度就是當天的日活了。我的 nginx 是通過 yum 安裝的,默認會對 nginx 日志進行切割,但是每天切割的時間不是當天的 00 點,這樣得到的日活數據可能不太準確。我就打算自定義 nginx 日志的切割。
所謂的"切割",并不是真的把一個文件"切成兩個",只是把原來的"access.log"文件重命名,比如重命名為今天的日期"2020-05-17.log",然后再創建一個名為"access.log"的新文件,以便新生成的日志仍然可以寫入到名為"access.log"的新文件中,這樣就能實現所謂的"日志滾動"或者"日志切割"的效果了。
但是,這樣做會遇到一些問題,我們來手動操作一下,首先,重命名文件
mv access.log 2020-05-17.log
我們已經重命名了"access.log"文件,但是你會發現,重命名后,nginx日志仍然會寫入到"2020-05-17.log"文件中,并不會自動創建一個新的"access.log"文件,即使你手動創建了一個新的"access.log"文件,nginx仍然會把日志寫入到重命名后的"2020-05-17.log"文件中。
出現上述情況,是因為nginx進程讀寫日志文件時,是通過文件描述符去操作的,雖然我們修改了原"access.log"文件的文件名,但是原文件描述符與文件本身的對應關系仍然存在,所以,單單對文件重命名是不夠的,我們需要讓nginx重新打開一個新文件,以便將新的日志寫入到新文件中。
通過yum源安裝nginx后,默認會安裝一個日志滾動的配置文件,這個配置文件就是 "/etc/logrotate.d/nginx" ,需要把這個文件刪除。默認的日志路徑是在 "/var/log/nginx/" ,我是在這個文件夾下寫了一個 shell 腳本, nginx_log_split.sh
D=$(date +%Y-%m-%d) # 獲取當天的日期# 移動文件mv -f /var/log/nginx/access.log /var/log/nginx/${D}.logsleep 0.5s# 重啟nginx/usr/sbin/nginx -s reload
使用 crontab 執行定時任務,crontab -e 后編輯一行
00 00 * * * /var/log/nginx/nginx_log_split.sh
感謝各位的閱讀,以上就是“nginx 日志怎么定時切割”的內容了,經過本文的學習后,相信大家對nginx 日志怎么定時切割這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。