日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Nginx >内容正文

Nginx

Nginx 日志文件切割

發布時間:2025/4/16 Nginx 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nginx 日志文件切割 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

偶然發現access.log有21G大,所以將其切割。

Nginx 是一個非常輕量的 Web 服務器,體積小、性能高、速度快等諸多優點。但不足的是也存在缺點,比如其產生的訪問日志文件一直就是一個,不會自動地進行切割,如果訪問量很大的話,將 導致日志文件容量非常大,不便于管理。當然了,我們也不希望看到這么龐大的一個訪問日志文件,那需要手動對這個文件進行切割。

在 Linux 平臺上 Shell 腳本豐富,使用 Shell 腳本加 crontab 命令能非常方便地進行切割,但在 Windows 平臺上就麻煩一些了,剛才弄了好長時間,就在這里記錄整理一下。

日志文件切割要求

由于 Nginx 的日志都是寫在一個文件當中的,因此,我們需要每天零點將前一天的日志存為另外一個文件,這里我們就將 Nginx 位于 logs 目錄中的 access.log 存為 access_[yyyy-MM-dd].log 的文件。其實 logs 目錄中還有個 error.log 的錯誤日志文件,這個文件也需要每天切割一個,在這里就說 access.log 了,error.log 的切割方法類似。

Linux 平臺切割

在 Linux 平臺上進行切割,需要使用 date 命令以獲得昨天的日期、使用 kill 命令向 Nginx 進程發送重新打開日志文件的信號,以及 crontab 設置執行任務周期。

先創建一個 Shell 腳本,如下:

Shell代碼?
  • #!/bin/bash
  • ##?零點執行該腳本
  • ##?Nginx?日志文件所在的目錄
  • LOGS_PATH=/usr/local/nginx/logs
  • ##?獲取昨天的?yyyy-MM-dd
  • YESTERDAY=$(date?-d?”yesterday”?+%Y-%m-%d)
  • ##?移動文件
  • mv?${LOGS_PATH}/access.log?${LOGS_PATH}/access_${YESTERDAY}.log
  • ##?向?Nginx?主進程發送?USR1?信號。USR1?信號是重新打開日志文件
  • kill?-USR1?$(cat?/usr/local/nginx/nginx.pid)
  • #!/bin/bash ## 零點執行該腳本 ## Nginx 日志文件所在的目錄 LOGS_PATH=/usr/local/nginx/logs ## 獲取昨天的 yyyy-MM-dd YESTERDAY=$(date -d "yesterday" +%Y-%m-%d) ## 移動文件 mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log ## 向 Nginx 主進程發送 USR1 信號。USR1 信號是重新打開日志文件 kill -USR1 $(cat /usr/local/nginx/nginx.pid)

    上面這個腳本中的最后一行必須向 Nginx 的進程發送 USR1 信號以重新打開日志文件,如果不寫的話,Nginx 會繼續將日志信息寫入 access_[yyyy-MM-dd].log 的那個文件中,這顯然是不正確的。

    腳本完成后將其存入 Nginx 安裝目錄的 sbin 中,取名為 cut-log.sh,之后使用 crontab -e 新增一個定時任務,在其中增加執行這個腳本:

    Shell代碼?
  • 0?0?*?*?*?/bin/bash?/usr/local/nginx/sbin/cut-log.sh
  • 0 0 * * * /bin/bash /usr/local/nginx/sbin/cut-log.sh

    到這里 Linux 下切割 Nginx 日志就完成了,可以將 crontab 設置為距當前時較近的時間測試一下,否則在零點出問題就不好了?。

    Windows 平臺切割

    要在 Windows 平臺上做這件事情就有點麻煩了。在 Windows 中沒有原生的命令能夠獲得昨天的日期,Windows 中的計劃任務設置我感覺也沒有 Linux 的 crontab 用得方便,再有批處理命令也沒有 Shell 腳本功能強大。總之,逐一來解決這些問題吧。

    新浪博客上有一篇文章?nginx for windows日志切割,但這篇文章有兩個不足之處:切割后的日志文件不是以昨天的日期命名;需要停止 Nginx 服務。為了切割日志停止服務,我認為有所不值,如果訪問量較小的話問題不大,但是訪問量較大的話這種做法是非常不可取的。為了彌補這些缺陷,我們對這個批處理文件進行了改進。

    要 Windows 平臺上使用 Linux 的 date 命令以獲得昨天的日期,我們可以到?SourceForge上去下載?UnxUtils這 個工具。UnxUtils 是個非常強大的工具集,將大多數的 Linux 命令都移植到 Windows 平臺上來了,比如:ls, grep, wc 等等 120 個命令,當然了其中也包括了我們需要的 date 工具。將這個工具解壓到一個目錄中,假定是 d:\common-path\UnxUtils 目錄中,將那些工具所在的 d:\common-path\UnxUtils\usr\local\wbin 添加到系統的環境變量 PATH 中,可以加到最后去。由于 Windows 平臺中有 date 內置命令,因此需要將 UnxUtils 的 date.exe 改名為其他的,比如改為 udate.exe。用 cmd 打開控制臺,輸入:

    D:\>udate -d "yesterday" +%Y-%m-%d 2010-05-31 D:\>_

    如果能正確輸出昨天日期的話,那么這一點我們就搞定了?。

    接下來需要寫一個批處理文件,假定我們的 Nginx 是放在 d:\httpServer\nginx-0.7.64 目錄中的,我們就在這個目錄中建一個 cut-log.bat 的文件:

    Batch代碼?
  • @echo?off
  • rem??獲取昨天的日期,存入?YESTERDAY?變量,udate?參數中的?%?需要改成?%%?進行轉義
  • for?/f?%%a?in?(‘udate?-d?”yesterday”?+%%Y-%%m-%%d’)?do?set?YESTERDAY=%%a
  • rem?設置?Nginx?位于的盤符
  • set?NGINX_DRIVER=d:
  • rem?設置?Nginx?的主目錄
  • set?NGINX_PATH=%NGINX_DRIVER%\green\httpServer\nginx-0.7.64
  • rem?設置?Nginx?的日志目錄
  • set?LOG_PATH=%NGINX_PATH%\logs
  • rem?移動文件
  • move?%LOG_PATH%\access.log?%LOG_PATH%\access_%YESTERDAY%.log
  • rem?切換到?Nginx?所在的盤符
  • %NGINX_DRIVER%
  • rem?進入?Nginx?的主目錄
  • cd?%NGINX_PATH%
  • rem?向?nginx?發送?reopen?信號以重新打開日志文件,功能與?Linux?平臺中的?kill?-USR1?一致
  • nginx?-s?reopen
  • echo?on
  • @echo off rem 獲取昨天的日期,存入 YESTERDAY 變量,udate 參數中的 % 需要改成 %% 進行轉義 for /f %%a in ('udate -d "yesterday" +%%Y-%%m-%%d') do set YESTERDAY=%%a rem 設置 Nginx 位于的盤符 set NGINX_DRIVER=d: rem 設置 Nginx 的主目錄 set NGINX_PATH=%NGINX_DRIVER%\green\httpServer\nginx-0.7.64 rem 設置 Nginx 的日志目錄 set LOG_PATH=%NGINX_PATH%\logs rem 移動文件 move %LOG_PATH%\access.log %LOG_PATH%\access_%YESTERDAY%.log rem 切換到 Nginx 所在的盤符 %NGINX_DRIVER% rem 進入 Nginx 的主目錄 cd %NGINX_PATH% rem 向 nginx 發送 reopen 信號以重新打開日志文件,功能與 Linux 平臺中的 kill -USR1 一致 nginx -s reopen echo on

    這個批處理寫好后,將其加入 Windows 的計劃任務中,設置為每天零時執行。需要注意的是,在執行 nginx -s reopen 命令時,當前目錄必須位于 Nginx 的主目錄中,否則會找不到日志文件在哪個目錄中(估計 Nginx 默認采用相對路徑尋找),這也就是批處理中需要進入盤符和 Nginx 主目錄的原因了,因為任務計劃執行時并不是在 Nginx 的主目錄中。

    結束語

    這里主要介紹了一下 Linux 平臺和 Windows 平臺上切割 Nginx 日志文件的方法。Linux 中可以直接使用一些內置的命令完成,而在 Windows 中需要裝載 UnxUtils 工具,不過這個工具集非常有用,比如使用其中的 tail 命令,我們在 Windows 中也能很方便地在控制臺中使用 tail -f 實時地查看日志文件的輸出。

    更多參考
    • 需要了解更多在 Linux 中使用 kill 命令向 Nginx 進程發送其他信號,以及該信號的意義可以參考?Nginx 中文 Wiki?上的?運行和控制 Nginx – 命令行參數和信號?這篇中文文檔。
    • Windows 平臺使用 nginx -s 命令向 Nginx 主進程發送各種信號,以及該信號的意義可以在?安裝Nginx?一文的最后找到。

    轉載于:https://my.oschina.net/liting/blog/396141

    總結

    以上是生活随笔為你收集整理的Nginx 日志文件切割的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。