1. 程式人生 > 實用技巧 >Nginx日誌切割

Nginx日誌切割

Nginx訪問日誌切割的兩種方法:

1.mv命令+shell指令碼

2.利用logrotate日誌檔案管理工具

一、mv + shell 指令碼命令實現日誌切割:#!/bin/bash

#auto mv nginx log shell
#by author 941268778
S_LOG=/usr/local/nginx/logs/access.log
D_LOG=/data/backup/`date +%Y%m%d`
echo -e "\033[32mPlease wait start cut shell scripts...\033[1m"
sleep 2
if [ ! -d $D_LOG ];then
        mkdir
-p $D_LOG fi mv $S_LOG $D_LOG kill -USR1 `cat /usr/local/nginx/logs/nginx.pid` echo "-------------------------------------------" echo "The Nginx log Cutting Successfully!" echo "You can access backup nginx log $D_LOG/access.log files."

#配置計劃任務

#crontab /var/spool/cron/root檔案中新增如下程式碼,每天凌晨自動切割日誌:

0 0 * * * /bin/sh /data/sh/auto_nginx_log.sh >>/tmp/nginx_cut.log 2>&1

知識點補充:

官方文件出處:http://nginx.org/en/docs/control.html

Nginx訊號控制使用的幾個選項:

TERM、INT 快速關閉程序
QUIT 優雅的關閉程序,即等請求結束之後再關閉
HUP 改變配置檔案之後、平滑的重讀配置檔案
USR1 切割日誌
USR2 Nginx平滑的升級
WINCH 優雅的關閉舊程序,配合USR2進行升級

二、安裝logrotate工具

yum install logrotate -y

安裝完成後,自動在/etc/cron.daily/下生成個logrotate可執行的指令碼檔案,此指令碼每天都會執行一次。

配置logrotate:

#在 /etc/logrotate.d/ 目錄下新建一個 nginx 的檔案
vim /etc/logrotate.d/nginx #########以下為檔案配置內容##############

/var/log/nginx/*.log {
daily
rotate 100
missingok
compress
delaycompress
notifempty
create 644 nginx nginx
postrotate
if [ -f /app/nginx/logs/nginx.pid ]; then
kill -USR1 `cat /app/nginx/logs/nginx.pid`
fi
endscript
}

我們也可以先手 手動執行一下切割試試看看效果

logrotate -f /etc/logrotate.d/nginx

logrotate 配置項詳解

logrotate 的預設配置檔案是 /etc/logrotate.conf。主要引數:
daily–>指定轉儲週期為每天

weekly–>指定轉儲週期為每週

monthly–>指定轉儲週期為每月

dateext–>在檔案末尾添加當前日期

compress–>通過 gzip 壓縮轉儲以後的日誌

nocompress–>不需要壓縮時,用這個引數

copytruncate–>先把日誌內容複製到舊日誌檔案後才清除日誌檔案內容,可以保證日誌記錄的連續性

nocopytruncate–>備份日誌檔案但是不截斷

create mode owner group–>轉儲檔案,使用指定的檔案模式建立新的日誌檔案

nocreate–>不建立新的日誌檔案

delaycompress 和 compress –>一起使用時,轉儲的日誌檔案到下一次轉儲時才壓縮

nodelaycompress–>覆蓋 delaycompress 選項,轉儲同時壓縮。

errors address–>專儲時的錯誤資訊傳送到指定的 Email 地址

ifempty–>即使是空檔案也轉儲,這個是 logrotate 的預設選項。

notifempty–>如果是空檔案的話,不轉儲

mail address–>把轉儲的日誌檔案傳送到指定的 E-mail 地址

nomail–>轉儲時不傳送日誌檔案

olddir directory–>轉儲後的日誌檔案放入指定的目錄,必須和當前日誌檔案在同一個檔案系統

noolddir–>轉儲後的日誌檔案和當前日誌檔案放在同一個目錄下

rotate count–>指定日誌檔案刪除之前轉儲的次數,0 指沒有備份,5 指保留 5 個備份

tabootext [+] list 讓 logrotate –> 不轉儲指定副檔名的檔案,預設的副檔名是:.rpm-orig, .rpmsave, v, 和 ~

size–> size 當日志文件到達指定的大小時才轉儲,Size 可以指定 bytes (預設)以及 KB (sizek)或者 MB (sizem).

prerotate/endscript –>在轉儲以前需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行

postrotate/endscript –>在轉儲以後需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行