午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

Nginx 日志文件切割(轉(zhuǎn))

 博雅書(shū)屋lhs 2017-12-31

偶然發(fā)現(xiàn)access.log有21G大,所以將其切割。

Nginx 是一個(gè)非常輕量的 Web 服務(wù)器,體積小、性能高、速度快等諸多優(yōu)點(diǎn)。但不足的是也存在缺點(diǎn),比如其產(chǎn)生的訪問(wèn)日志文件一直就是一個(gè),不會(huì)自動(dòng)地進(jìn)行切割,如果訪問(wèn)量很大的話,將 導(dǎo)致日志文件容量非常大,不便于管理。當(dāng)然了,我們也不希望看到這么龐大的一個(gè)訪問(wèn)日志文件,那需要手動(dòng)對(duì)這個(gè)文件進(jìn)行切割。

在 Linux 平臺(tái)上 Shell 腳本豐富,使用 Shell 腳本加 crontab 命令能非常方便地進(jìn)行切割,但在 Windows 平臺(tái)上就麻煩一些了,剛才弄了好長(zhǎng)時(shí)間,就在這里記錄整理一下。

日志文件切割要求

由于 Nginx 的日志都是寫(xiě)在一個(gè)文件當(dāng)中的,因此,我們需要每天零點(diǎn)將前一天的日志存為另外一個(gè)文件,這里我們就將 Nginx 位于 logs 目錄中的 access.log 存為 access_[yyyy-MM-dd].log 的文件。其實(shí) logs 目錄中還有個(gè) error.log 的錯(cuò)誤日志文件,這個(gè)文件也需要每天切割一個(gè),在這里就說(shuō) access.log 了,error.log 的切割方法類(lèi)似。

Linux 平臺(tái)切割

在 Linux 平臺(tái)上進(jìn)行切割,需要使用 date 命令以獲得昨天的日期、使用 kill 命令向 Nginx 進(jìn)程發(fā)送重新打開(kāi)日志文件的信號(hào),以及 crontab 設(shè)置執(zhí)行任務(wù)周期。

先創(chuàng)建一個(gè) Shell 腳本,如下:

Shell代碼 
  1. #!/bin/bash
  2. ## 零點(diǎn)執(zhí)行該腳本
  3. ## Nginx 日志文件所在的目錄
  4. LOGS_PATH=/usr/local/nginx/logs
  5. ## 獲取昨天的 yyyy-MM-dd
  6. YESTERDAY=$(date -d ”yesterday” +%Y-%m-%d)
  7. ## 移動(dòng)文件
  8. mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
  9. ## 向 Nginx 主進(jìn)程發(fā)送 USR1 信號(hào)。USR1 信號(hào)是重新打開(kāi)日志文件
  10. kill -USR1 $(cat /usr/local/nginx/nginx.pid)
#!/bin/bash
## 零點(diǎn)執(zhí)行該腳本
## Nginx 日志文件所在的目錄
LOGS_PATH=/usr/local/nginx/logs
## 獲取昨天的 yyyy-MM-dd
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
## 移動(dòng)文件
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
## 向 Nginx 主進(jìn)程發(fā)送 USR1 信號(hào)。USR1 信號(hào)是重新打開(kāi)日志文件
kill -USR1 $(cat /usr/local/nginx/nginx.pid)

上面這個(gè)腳本中的最后一行必須向 Nginx 的進(jìn)程發(fā)送 USR1 信號(hào)以重新打開(kāi)日志文件,如果不寫(xiě)的話,Nginx 會(huì)繼續(xù)將日志信息寫(xiě)入 access_[yyyy-MM-dd].log 的那個(gè)文件中,這顯然是不正確的。

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

Shell代碼 
  1. 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 設(shè)置為距當(dāng)前時(shí)較近的時(shí)間測(cè)試一下,否則在零點(diǎn)出問(wèn)題就不好了 。

Windows 平臺(tái)切割

要在 Windows 平臺(tái)上做這件事情就有點(diǎn)麻煩了。在 Windows 中沒(méi)有原生的命令能夠獲得昨天的日期,Windows 中的計(jì)劃任務(wù)設(shè)置我感覺(jué)也沒(méi)有 Linux 的 crontab 用得方便,再有批處理命令也沒(méi)有 Shell 腳本功能強(qiáng)大??傊鹨粊?lái)解決這些問(wèn)題吧。

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

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

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

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

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

Batch代碼 
  1. @echo off
  2. rem  獲取昨天的日期,存入 YESTERDAY 變量,udate 參數(shù)中的 % 需要改成 %% 進(jìn)行轉(zhuǎn)義
  3. for /f %%a in (‘udate -d ”yesterday” +%%Y-%%m-%%d’) do set YESTERDAY=%%a
  4. rem 設(shè)置 Nginx 位于的盤(pán)符
  5. set NGINX_DRIVER=d:
  6. rem 設(shè)置 Nginx 的主目錄
  7. set NGINX_PATH=%NGINX_DRIVER%\green\httpServer\nginx-0.7.64
  8. rem 設(shè)置 Nginx 的日志目錄
  9. set LOG_PATH=%NGINX_PATH%\logs
  10. rem 移動(dòng)文件
  11. move %LOG_PATH%\access.log %LOG_PATH%\access_%YESTERDAY%.log
  12. rem 切換到 Nginx 所在的盤(pán)符
  13. %NGINX_DRIVER%
  14. rem 進(jìn)入 Nginx 的主目錄
  15. cd %NGINX_PATH%
  16. rem 向 nginx 發(fā)送 reopen 信號(hào)以重新打開(kāi)日志文件,功能與 Linux 平臺(tái)中的 kill -USR1 一致
  17. nginx -s reopen
  18. echo on
@echo off
rem  獲取昨天的日期,存入 YESTERDAY 變量,udate 參數(shù)中的 % 需要改成 %% 進(jìn)行轉(zhuǎn)義
for /f %%a in ('udate -d "yesterday" +%%Y-%%m-%%d') do set YESTERDAY=%%a
rem 設(shè)置 Nginx 位于的盤(pán)符
set NGINX_DRIVER=d:
rem 設(shè)置 Nginx 的主目錄
set NGINX_PATH=%NGINX_DRIVER%\green\httpServer\nginx-0.7.64
rem 設(shè)置 Nginx 的日志目錄
set LOG_PATH=%NGINX_PATH%\logs
rem 移動(dòng)文件
move %LOG_PATH%\access.log %LOG_PATH%\access_%YESTERDAY%.log
rem 切換到 Nginx 所在的盤(pán)符
%NGINX_DRIVER%
rem 進(jìn)入 Nginx 的主目錄
cd %NGINX_PATH%
rem 向 nginx 發(fā)送 reopen 信號(hào)以重新打開(kāi)日志文件,功能與 Linux 平臺(tái)中的 kill -USR1 一致
nginx -s reopen
echo on

這個(gè)批處理寫(xiě)好后,將其加入 Windows 的計(jì)劃任務(wù)中,設(shè)置為每天零時(shí)執(zhí)行。需要注意的是,在執(zhí)行 nginx -s reopen 命令時(shí),當(dāng)前目錄必須位于 Nginx 的主目錄中,否則會(huì)找不到日志文件在哪個(gè)目錄中(估計(jì) Nginx 默認(rèn)采用相對(duì)路徑尋找),這也就是批處理中需要進(jìn)入盤(pán)符和 Nginx 主目錄的原因了,因?yàn)槿蝿?wù)計(jì)劃執(zhí)行時(shí)并不是在 Nginx 的主目錄中。

結(jié)束語(yǔ)

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

更多參考

 : http://www./blog/index.php/2010/08/11/178/

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多