Nginx日誌切割
阿新 • • 發佈:2020-10-15
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 –>在轉儲以後需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行