Nginx日誌切割目錄概要
- 自定義shell 腳本
- vim /usr/local/sbin/nginx_log_rotate.sh//寫入以下內容
#! /bin/bash
## 假設nginx的日誌存放路徑爲/data/logs/
d=`date -d "-1 day" +%Y%m%d`
logdir="/data/logs"
nginx_pid="/usr/local/nginx/logs/nginx.pid"
cd $logdir
for log in `ls *.log`
do
mv $log $log-$d
done
/bin/kill -HUP `cat $nginx_pid`
- 任務計劃
- 0 0 * * * /bin/bash /usr/local/sbin/nginx_log_rotate.sh
Nginx日誌切割
- Nginx沒有自帶日誌切割工具,只能藉助系統的日誌切割的工具或者本身寫切割的腳本實現
- 這裏寫一個日誌切割腳本
- 首先建立一個shell腳本vim /usr/local/sbin/nginx_log_rotate.sh
- 全部的shell腳本放入到/usr/local/sbin/目錄下
[root@hanfeng vhost]# vim /usr/local/sbin/nginx_log_rotate.sh
#! /bin/bash
d=`date -d "-1 day" +%Y%m%d`
logdir="/tmp/"
nginx_pid="/usr/local/nginx/logs/nginx.pid"
cd $logdir
for log in `ls *.log`
do
mv $log $log-$d
done
/bin/kill -HUP `cat $nginx_pid`
[root@hanfeng vhost]# ls
aaa.com.conf test.com.conf
[root@hanfeng vhost]# for f in `ls `; do ls -l $f ; done
-rw-r--r--. 1 root root 140 1月 3 23:17 aaa.com.conf
-rw-r--r--. 1 root root 295 1月 4 22:07 test.com.conf
[root@hanfeng vhost]#
- 執行shell腳本,並加-x權限
[root@hanfeng vhost]# sh -x /usr/local/sbin/nginx_log_rotate.sh
++ date -d '-1 day' +%Y%m%d
+ d=20180103
+ logdir=/tmp/
+ nginx_pid=/usr/local/nginx/logs/nginx.pid
+ cd /tmp/
++ ls test.com.log
+ for log in '`ls *.log`'
+ mv test.com.log test.com.log-20180103
++ cat /usr/local/nginx/logs/nginx.pid
+ /bin/kill -HUP 1612
[root@hanfeng vhost]#
- 查看日誌切割文件,天天都生成一個日誌,在天天切割後,過段時間還要按期清理
[root@hanfeng vhost]# ls /tmp/
mysql.sock pear php-fcgi.sock test.com.log test.com.log-20180103
[root@hanfeng vhost]#
- 刪除30天之前的日誌文件
[root@hanfeng vhost]# find /tmp/ -name *.log-* -type f -mtime +30 |xargs rm
- 寫完腳本後,還要加一個任務計劃crontab -e——>這裏由於是測試,腳本就不加入到任務計劃中了
[root@hanfeng vhost]# crontab -e
0 0 * * * /bin/bash /usr/local/sbin/nginx_log_rotate.sh
shell腳本知識點
- 日誌時間切割的定義
- 寫shell腳本的時候,若是有命令不明白,能夠直接把命令運行一下就知道結果了
- 假設這個命令「 d=
date -d 「-1 day」 +%Y%m%d
」不明白意思
- ctrl+z 把當前操做暫停丟到後臺
[root@hanfneg ~]# date -d 「-1 day」 +%Y%m%d
20180103
[root@hanfeng vhost]# date
2018年 01月 04日 星期四 23:27:23 CST
- 就是時間,並且是昨天的時間,由於目前作的日誌切割都是以天爲單位,並且,日誌須要過了當天23點59分59秒之後到次日的0點0分01秒才切割
- 指定PID路徑的意義
- 「 nginx_pid=」/usr/local/nginx/logs/nginx.pid」 」這條命令的意思,就是指定nginx的PID 的路徑所在
- 若是找不到指定PID的所在,那麼下面的「 /bin/kill -HUP
cat $nginx_pid
」這個命令也將沒有辦法繼續執行
- 「 /bin/kill -HUP
cat $nginx_pid
」 z這條命令的意思就是從新加載一次nginx服務
- 執行「 /bin/kill -HUP
cat $nginx_pid
」這條命令的目的是由於切割日誌之後 「mv $log $log-$d 」 會將日誌移動位置,若是不使用這條命令從新加載一次nginx服務、從新生成一第二天志文件,那麼將會致使服務出錯
- 因此,爲了保證「 /bin/kill -HUP
cat $nginx_pid
」能準確的執行,須要肯定nginx的PID所在
[root@hanfeng ~]# ls /usr/local/nginx/logs/
access.log error.log nginx_error.log nginx.pid
- 循環語句理解
- for f in ‘ls ‘ ; do ls -l $f; done
- for 循環開始,f 表示文件,in 表示作什麼,‘ls’in執行的東西; do 執行 ls -f $f;done 結束
- 任務計劃
- 腳本寫完之後,須要寫一個計劃,讓腳本在規定的時間運行。
- crontab -e
- 0 0 * * * /bin/bash /usr/local/sbin/nginx_logrotate.sh
- 長時間累積,會生成大量的日誌須要進行清理
- fidn /tmp/ -type f -name .log- -mtime +30 |xargs rm