日誌切割簡單原理如下,使用最low的方法手動日誌切割
[root@www ~]# cd /usr/local/nginx/logs/
[root@www logs]# ll -h --要切割的日誌lulei.access.log文件大小60M
total 24K
-rw-r--r-- 1 root root 9.6K Mar 18 21:32 access.log
-rw-r--r-- 1 root root 7.9K Mar 19 21:09 error.log
-rw-r--r-- 1 root root 60M Mar 19 21:09 lulei.access.log
-rw-r--r-- 1 root root 6 Mar 19 21:07 nginx.pid
[root@www logs]# mv lulei.access.log lulei.access.log.bak --備份要切割的日誌文件
[root@www logs]# /usr/local/nginx/sbin/nginx -s reopen --使用reopen重新打開日誌文件
[root@www logs]# ll -h --可以看到日誌切割成功
total 24K
-rw-r--r-- 1 root root 9.6K Mar 18 21:32 access.log
-rw-r--r-- 1 nginx root 7.9K Mar 19 21:11 error.log
-rw-r--r-- 1 nginx root 0 Mar 19 21:11 lulei.access.log
-rw-r--r-- 1 root root 60M Mar 19 21:09 lulei.access.log.bak
-rw-r--r-- 1 root root 6 Mar 19 21:07 nginx.pid
可看到nginx重新生成的新的lulei.access.log日誌文件,而原來的日誌文件變成了以.bak結尾的文件,這樣就實現了日誌切割
通過shell腳本和crontab來實現
Nginx WEB服務器每天會產生大量的訪問日誌,而且不會自動地進行切割,如果持續天數訪問,將會導致該access.log日誌文件容量非常大,不便於SA查看相關的網站異常日誌。
可以基於Shell 腳本結合Crontab計劃任務對Nginx日誌進行自動、快速的切割,其切割的方法使用mv命令即可
#!/bin/bash
#auto mv nginx log shell
#by author jfedu.net
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."
Nginx日誌切割執行結果
[root@www backup]# ./logcut.sh
Please wait start cut shell scripts...
-------------------------------------------
The Nginx log Cutting Successfully!
You can access backup nginx log /data/backup/20200319/access.log files.
將如上腳本內容寫入auto_nginx_log.sh文件,crontab /var/spool/cron/root文件中添加如下代碼,每天凌晨自動切割日誌:
0 0 * * * /bin/sh /data/sh/auto_nginx_log.sh >>/tmp/nginx_cut.log 2>&1