Nginx日誌切割並計劃任務自動上傳到FTP服務器

Nginx日誌切割並計劃任務自動上傳到FTP服務器

 

楓城浪子原創,轉載請標明出處!

微信bh19890922

QQ445718526,490425557

更多技術博文請見個人博客:

https://fengchenglangzi.000webhostapp.com

http://fengchenglangzi.blog.51cto.com

 

一、簡述

Nginx WEB服務器每天會產生大量的訪問日誌,而且不會自動地進行切割,如果持續天數訪問,將會導致該access.log日誌文件容量非常大,不便於SA查看相關的網站異常日誌,並且後期進行分割非常不易。

日誌分割可以基於Shell 腳本結合Crontab計劃任務對Nginx日誌進行自動、快速的切割,其切割的方法使用mv命令即可!

二、配置

安裝vsftp服務器端


[root@localhost ~]# yum -y install vsftpd


本地安裝ftp命令,否則會提示ftp: command not found

[root@localhost ~]# rpm -Uvhhttp://mirror.centos.org/centos/6/os/x86_64/Packages/ftp-0.17-54.el6.x86_64.rpm


自動切割Nginx日誌與自動上傳到FTP服務器的shell腳本如下:

#by fengchenglangzi
#auto cut nginx log
########################
#!/bin/bash
#2017-9-7 20:28:58
#by fengchenglangzi
#auto cut nginx log
########################
NGINX_LOG_FILE="/usr/local/nginx/logs/access.log"
DES_LOG_DIR="/data/backup/nginx/logs"
DES_LOG_FILE="$DES_LOG_DIR/access_$(date+%Y%m%d%H)"
echo -e "\033[32mPlease wait start cutshell scripts!\033[0m"
sleep 1
if [ ! -d $DES_LOG_DIR ];then
       mkdir -p $DES_LOG_DIR
       echo -e "\033[32m$DES_LOG_DIR created!\033[0m"
fi
mv $NGINX_LOG_FILE $DES_LOG_FILE
kill -USR1  $(cat/usr/local/nginx/logs/nginx.pid)
echo -e "\033[32mNginx log cuttingsuccessfully completed!\033[0m"
ftp -n << EOF
open 192.168.8.194
user nginx nginx
binary
#使用二進制
cd /home/nginx/
#進入ftp服務器目錄
lcd $DES_LOG_DIR
#進入本地目錄
prompt
#打開prompt模式,一般prompt模式在使用多文件傳輸中纔用到,默認爲打開狀態。如果prompt模式未打開,命令mput和mget將會傳輸目錄中的所有文件
put $(echo $DES_LOG_FILE|awk-F"/" '{print $NF}')
#如果直接調用$ DES_LOG_FILE變量會報錯,因爲這個變量是一個絕對路徑,由於上面調用了lcd命令,所以位置就已經處於$DES_LOG_DIR目錄下,此時直接調用的話遠程ftp服務器是無法識別這個路徑的,所以這裏直接取最後的日誌文件名即可
close
bye
EOF

三、添加計劃任務

將以上腳本添加到任務計劃

默認情況下所有的任務計劃都會放到下面的目錄中,而且默認是沒有任何計劃的

[root@localhost ~]# ll /var/spool/cron/
total 0
[root@localhost ~]#

執行下面命令可以創建當前用戶的計劃任務

[root@localhost cron]# crontab -e
no crontab for root - using an empty one
 
0 0  *  * *  /bin/sh  /root/auto_cut_nginx_log.sh>>/data/backup/nginx/nginx_cut.log 2>&1

保存後,在目錄中就會出現當前用戶命名的計劃任務了

[root@localhost cron]# cd /var/spool/cron/
[root@localhost cron]# ll
total 4
-rw------- 1 root root 92 Aug 17 19:15 root
[root@localhost cron]# cat root
0 0  *  * *  /bin/sh  /root/auto_cut_nginx_log.sh>>/data/backup/nginx/nginx_cut.log 2>&1
[root@localhost cron]# crontab -l
0 0  *  * *  /bin/sh  /root/auto_cut_nginx_log.sh>>/data/backup/nginx/nginx_cut.log 2>&1
[root@localhost cron]#

 

以上就是Nginx日誌切割並添加到任務計劃事例!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章