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日誌切割並添加到任務計劃事例!