Linux下nginx日誌自動切割

2021-07-09 08:30:46 字數 1346 閱讀 6306

他山之石,可以攻玉

需求與思路

查詢nginx日誌時發現main-access.log已達到幾十個g,即便是error.log也接近1g,才意識到一直忽視了日誌檔案的管理,這非常不利於日誌的查詢和問題的追蹤,而人為切割有太多不確定性,所以實現nginx日誌的自動切割是很有必要的。

我是通過shell指令碼和cron定時服務實現linux平台下nginx日誌自動切割的。

1. 建立shell指令碼

#!/bin/bash

#設定cron定時中午12點執行該指令碼

#main-access.log日誌所在目錄

access_logs_path=/data/tengine/log

#error.log日誌所在目錄

error_logs_path=/data/tengine/log/nginx

#日誌更名

mv $/main-access.log

$/main-access_backup$(

date +%y

%m%d

%h%m).log

mv $/error.log

$/error_backup$(

date +%y

%m%d

%h%m).log

#生成新的日誌檔案

kill -usr1 $(cat /data/tengine/nginx.pid)

日誌更名規則:

mv 路徑/檔名.log 路徑/檔名+backup+當時時間.log

生成新日誌指令解析:

cat /data/tengine/nginx.pid 是獲取nginx的程序號,sh指令碼裡$開頭表示變數,則相當於「kill -usr1 程序號」。usr1是nginx中定義的乙個訊號,「#define ngx_reopen_signal usr1」,這個訊號是通過kill向程序傳送的。

該行指令執行後,就會建立乙個新的日誌檔案,和更名前的日誌檔名稱相同。

將建立好的指令碼命名(我命名為autocut_log.sh),然後存放到nginx安裝目錄的sbin下,存放路徑在設定定時任務的時候會用到。

2. 建立定時任務

編輯當前使用者的定時任務

[root@localhost ~]#crontab -e
#cut_nginx_log

0012 * * * /data/tengine

/sbin/cut_log.sh

該定時任務我是定在每天的12:00整執行的。儲存退出,提示「crontab: installing new crontab」則說明定時任務建立成功,可以設定乙個距當前較近的時間先測試一下是否成功。

Linux下nginx日誌檔案自動切割刪除

1 編寫shell指令碼qiege.sh bin bash logs path data wwwlogs www.codelovers.cn yesterday date d yesterday y m d 按天切割日誌 mv www.codelovers.cn.log www.codelovers...

linux下 Nginx日誌分割

linux下 nginx日誌分割 廢話不多說,直接上 bin bash 間隔1天執行該指令碼 nginx 日誌檔案所在的目錄 logs path usr local nginx logs nginx 日誌檔案生成後的目錄 newlogs path home wwwlogs 獲取昨天的 yyyy mm...

Nginx 日誌自動分割

nginx 的日誌都是寫在乙個檔案當中的,不會自動地進行切割,如果訪問量很大的話,將導致日誌檔案容量非常大,不便於管理和造成nginx 日誌寫入效率低下等問題。所以,往往需要要對access log error log日誌進行切割。切割日誌一般利用usr1訊號讓nginx產生新的日誌。例項 123 ...