精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Linux 自帶神器 logrotate 詳解

系統 Linux
logrotate 程序是一個日志文件管理工具。用于分割日志文件,刪除舊的日志文件,并創建新的日志文件,起到“轉儲”作用。可以節省磁盤空間。下面就對 logrotate 日志輪轉操作做一梳理記錄。

 對于 Linux 系統安全來說,日志文件是極其重要的工具。不知為何,我發現很多運維同學的服務器上都運行著一些諸如每天切分 Nginx日志之類的 CRON 腳本,大家似乎遺忘了 Logrotate,爭相發明自己的輪子,這真是讓人沮喪??!就好比明明身邊躺著現成的性感美女,大家卻忙著自娛自樂,罪過!

logrotate 程序是一個日志文件管理工具。用于分割日志文件,刪除舊的日志文件,并創建新的日志文件,起到“轉儲”作用。可以節省磁盤空間。下面就對 logrotate 日志輪轉操作做一梳理記錄。

1、配置文件介紹

Linux系統默認安裝logrotate工具,它默認的配置文件在: 

  1. /etc/logrotate.conf  
  2. /etc/logrotate.d/ 

logrotate.conf 才主要的配置文件,logrotate.d 是一個目錄,該目錄里的所有文件都會被主動的讀入/etc/logrotate.conf中執行。

另外,如果 /etc/logrotate.d/ 里面的文件中沒有設定一些細節,則會以/etc/logrotate.conf這個文件的設定來作為默認值。

Logrotate是基于CRON來運行的,其腳本是/etc/cron.daily/logrotate,日志輪轉是系統自動完成的。實際運行時,Logrotate會調用配置文件/etc/logrotate.conf??梢栽?etc/logrotate.d目錄里放置自定義好的配置文件,用來覆蓋Logrotate的缺省值。 

  1. [root@huanqiu_web1 ~]# cat /etc/cron.daily/logrotate  
  2. #!/bin/sh  
  3. /usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1  
  4. EXITVALUE=$?  
  5. if [ $EXITVALUE != 0 ]; then  
  6.     /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"  
  7. fi  
  8. exit 0 

如果等不及cron自動執行日志輪轉,想手動強制切割日志,需要加-f參數;不過正式執行前最好通過Debug選項來驗證一下(-d參數),這對調試也很重要: 

  1. # /usr/sbin/logrotate -f /etc/logrotate.d/nginx  
  2. # /usr/sbin/logrotate -d -f /etc/logrotate.d/nginx 

logrotate 命令格式: 

  1. logrotate [OPTION...] <configfile>  
  2. -d, --debug :debug模式,測試配置文件是否有錯誤。  
  3. -f, --force :強制轉儲文件。 
  4. -m, --mail=command :壓縮日志后,發送日志到指定郵箱。  
  5. -s, --state=statefile :使用指定的狀態文件。  
  6. -v, --verbose :顯示轉儲過程。 

根據日志切割設置進行操作,并顯示詳細信息: 

  1. [root@huanqiu_web1 ~]# /usr/sbin/logrotate -v /etc/logrotate.conf 
  2. [root@huanqiu_web1 ~]# /usr/sbin/logrotate -v /etc/logrotate.d/php 

根據日志切割設置進行執行,并顯示詳細信息,但是不進行具體操作,debug模式 

  1. [root@huanqiu_web1 ~]# /usr/sbin/logrotate -d /etc/logrotate.conf  
  2. [root@huanqiu_web1 ~]# /usr/sbin/logrotate -d /etc/logrotate.d/nginx 

查看各log文件的具體執行情況 

  1. [root@fangfull_web1 ~]# cat /var/lib/logrotate.status 

2、切割介紹

比如以系統日志/var/log/message做切割來簡單說明下:

  •  第一次執行完rotate(輪轉)之后,原本的messages會變成messages.1,而且會制造一個空的messages給系統來儲存日志;
  •  第二次執行之后,messages.1會變成messages.2,而messages會變成messages.1,又造成一個空的messages來儲存日志!

如果僅設定保留三個日志(即輪轉3次)的話,那么執行第三次時,則 messages.3這個檔案就會被刪除,并由后面的較新的保存日志所取代!也就是會保存最新的幾個日志。

日志究竟輪換幾次,這個是根據配置文件中的dateext 參數來判定的。

看下logrotate.conf配置: 

  1. # cat /etc/logrotate.conf  
  2. # 底下的設定是 "logrotate 的默認值" ,如果別的文件設定了其他的值,  
  3. # 就會以其它文件的設定為主  
  4. weekly          //默認每一周執行一次rotate輪轉工作  
  5. rotate 4       //保留多少個日志文件(輪轉幾次).默認保留四個.就是指定日志文件刪除之前輪轉的次數,0 指沒有備份  
  6. create         //自動創建新的日志文件,新的日志文件具有和原來的文件相同的權限;因為日志被改名,因此要創建一個新的來繼續存儲之前的日志  
  7. dateext       //這個參數很重要!就是切割后的日志文件以當前日期為格式結尾,如xxx.log-20131216這樣,如果注釋掉,切割出來是按數字遞增,即前面說的 xxx.log-1這種格式  
  8. compress      //是否通過gzip壓縮轉儲以后的日志文件,如xxx.log-20131216.gz ;如果不需要壓縮,注釋掉就行 
  9. include /etc/logrotate.d  
  10. # 將 /etc/logrotate.d/ 目錄中的所有文件都加載進來  
  11. /var/log/wtmp {                 //僅針對 /var/log/wtmp 所設定的參數  
  12. monthly                    //每月一次切割,取代默認的一周  
  13. minsize 1M              //文件大小超過 1M 后才會切割  
  14. create 0664 root utmp            //指定新建的日志文件權限以及所屬用戶和組  
  15. rotate 1                    //只保留一個日志.  
  16.  
  17. # 這個 wtmp 可記錄用戶登錄系統及系統重啟的時間  
  18. # 因為有 minsize 的參數,因此不見得每個月一定會執行一次喔.要看文件大小。 

由這個文件的設定可以知道/etc/logrotate.d其實就是由/etc/logrotate.conf 所規劃出來的目錄,雖然可以將所有的配置都寫入 /etc/logrotate.conf ,但是這樣一來這個文件就實在是太復雜了,尤其是當使用很多的服務在系統上面時, 每個服務都要去修改 /etc/logrotate.conf 的設定也似乎不太合理了。

所以,如果獨立出來一個目錄,那么每個要切割日志的服務, 就可以獨自成為一個文件,并且放置到 /etc/logrotate.d/ 當中。

其他重要參數說明: 

  1. compress                                   通過gzip 壓縮轉儲以后的日志  
  2. nocompress                                不做gzip壓縮處理  
  3. copytruncate                              用于還在打開中的日志文件,把當前日志備份并截斷;是先拷貝再清空的方式,拷貝和清空之間有一個時間差,可能會丟失部分日志數據。  
  4. nocopytruncate                           備份日志文件不過不截斷  
  5. create mode owner group             輪轉時指定創建新文件的屬性,如create 0777 nobody nobody  
  6. nocreate                                    不建立新的日志文件 
  7. delaycompress                           和compress 一起使用時,轉儲的日志文件到下一次轉儲時才壓縮  
  8. nodelaycompress                        覆蓋 delaycompress 選項,轉儲同時壓縮。  
  9. missingok                                 如果日志丟失,不報錯繼續滾動下一個日志  
  10. errors address                           專儲時的錯誤信息發送到指定的Email 地址  
  11. ifempty                                    即使日志文件為空文件也做輪轉,這個是logrotate的缺省選項。  
  12. notifempty                               當日志文件為空時,不進行輪轉  
  13. mail address                             把轉儲的日志文件發送到指定的E-mail 地址  
  14. nomail                                     轉儲時不發送日志文件  
  15. olddir directory                         轉儲后的日志文件放入指定的目錄,必須和當前日志文件在同一個文件系統  
  16. noolddir                                   轉儲后的日志文件和當前日志文件放在同一個目錄下  
  17. sharedscripts                           運行postrotate腳本,作用是在所有日志都輪轉后統一執行一次腳本。如果沒有配置這個,那么每個日志輪轉后都會執行一次腳本  
  18. prerotate                                 在logrotate轉儲之前需要執行的指令,例如修改文件的屬性等動作;必須獨立成行  
  19. postrotate                               在logrotate轉儲之后需要執行的指令,例如重新啟動 (kill -HUP) 某個服務!必須獨立成行  
  20. daily                                       指定轉儲周期為每天  
  21. weekly                                    指定轉儲周期為每周  
  22. monthly                                  指定轉儲周期為每月  
  23. rotate count                            指定日志文件刪除之前轉儲的次數,0 指沒有備份,5 指保留5 個備份  
  24. dateext                                  使用當期日期作為命名格式  
  25. dateformat .%s                       配合dateext使用,緊跟在下一行出現,定義文件切割后的文件名,必須配合dateext使用,只支持 %Y %m %d %s 這四個參數  
  26. size(或minsize) log-size            當日志文件到達指定的大小時才轉儲,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem).  
  27. 當日志文件 >= log-size 的時候就轉儲。 以下為合法格式:(其他格式的單位大小寫沒有試過)  
  28. size = 5 或 size 5 (>= 5 個字節就轉儲)  
  29. size = 100k 或 size 100k  
  30. size = 100M 或 size 100M 

小示例:下面一個切割nginx日志的配置 

  1. [root@master-server ~]# vim /etc/logrotate.d/nginx  
  2. /usr/local/nginx/logs/*.log {  
  3. daily  
  4. rotate 7  
  5. missingok  
  6. notifempty  
  7. dateext  
  8. sharedscripts  
  9. postrotate  
  10.     if [ -f /usr/local/nginx/logs/nginx.pid ]; then  
  11.         kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`  
  12.     fi  
  13. endscript  

分享一例曾經使用過的nginx日志切割處理腳本:

1)logrotate日志分割配置 

  1. [root@bastion-IDC ~# vim /etc/logrotate.d/nginx  
  2. /data/nginx_logs/*.access_log        
  3.  
  4. nocompress                                  
  5. daily                                
  6. opytruncate                                   
  7. create                               
  8. ifempty                                    
  9. olddir /data/nginx_logs/days            
  10. rotate 0                                         

2)日志分割腳本 

  1. [root@bastion-IDC ~# vim /usr/local/sbin/logrotate-nginx.sh  
  2. #!/bin/bash  
  3. #創建轉儲日志壓縮存放目錄  
  4. mkdir -p /data/nginx_logs/days  
  5. #手工對nginx日志進行切割轉換  
  6. /usr/sbin/logrotate -vf /etc/logrotate.d/nginx 
  7. #當前時間  
  8. time=$(date -d "yesterday" +"%Y-%m-%d")  
  9. #進入轉儲日志存放目錄  
  10. cd /data/nginx_logs/days  
  11. #對目錄中的轉儲日志文件的文件名進行統一轉換  
  12. for i in $(ls ./ | grep "^\(.*\)\.[[:digit:]]$")  
  13. do 
  14. mv ${i} ./$(echo ${i}|sed -n 's/^\(.*\)\.\([[:digit:]]\)$/\1/p')-$(echo $time)  
  15. done  
  16. #對轉儲的日志文件進行壓縮存放,并刪除原有轉儲的日志文件,只保存壓縮后的日志文件。以節約存儲空間  
  17. for i in $(ls ./ | grep "^\(.*\)\-\([[:digit:]-]\+\)$")  
  18. do  
  19. tar jcvf ${i}.bz2 ./${i}  
  20. rm -rf ./${i}  
  21. done  
  22. #只保留最近7天的壓縮轉儲日志文件  
  23. find /data/nginx_logs/days/* -name "*.bz2" -mtime 7 -type f -exec rm -rf {} \; 

3)crontab定時執行 

  1. [root@bastion-IDC ~# crontab -e  
  2. #logrotate  
  3. 0 0 * * * /bin/bash -x /usr/local/sbin/logrotate-nginx.sh > /dev/null 2> 

手動執行腳本,測試下看看: 

  1. [root@bastion-IDC ~# /bin/bash -x /usr/local/sbin/logrotate-nginx.sh  
  2. [root@bastion-IDC ~# cd /data/nginx_logs/days  
  3. [root@bastion-IDC days# ls  
  4. huantest.access_log-2017-01-18.bz2 

php腳本切割一例: 

  1. [root@huanqiu_web1 ~]# cat /etc/logrotate.d/php  
  2. /Data/logs/php/*log {  
  3.     daily  
  4.     rotate 365  
  5.     missingok  
  6.     notifempty  
  7.     compress  
  8.     dateext  
  9.     sharedscripts  
  10.     postrotate  
  11.         if [ -f /Data/app/php5.6.26/var/run/php-fpm.pid ]; then  
  12.             kill -USR1 `cat /Data/app/php5.6.26/var/run/php-fpm.pid`  
  13.         fi  
  14.     endscript  
  15.     postrotate  
  16.         /bin/chmod 644 /Data/logs/php/*gz  
  17.     endscript  
  18. [root@huanqiu_web1 ~]# ll /Data/app/php5.6.26/var/run/php-fpm.pid  
  19. -rw-r--r-- 1 root root 4 Dec 28 17:03 /Data/app/php5.6.26/var/run/php-fpm.pid 
  20. [root@huanqiu_web1 ~]# cd /Data/logs/php  
  21. [root@huanqiu_web1 php]# ll  
  22. total 25676  
  23. -rw-r--r-- 1 root   root         0 Jun  1  2016 error.log  
  24. -rw-r--r-- 1 nobody nobody     182 Aug 30  2015 error.log-20150830.gz  
  25. -rw-r--r-- 1 nobody nobody     371 Sep  1  2015 error.log-20150901.gz 
  26. -rw-r--r-- 1 nobody nobody     315 Sep  7  2015 error.log-20150907.gz  
  27. .........  
  28. ......... 

nginx日志切割一例 

  1. [root@huanqiu_web1 ~]# cat /etc/logrotate.d/nginx  
  2. /Data/logs/nginx/*/*log {  
  3.     daily  
  4.     rotate 365  
  5.     missingok  
  6.     notifempty  
  7.     compress  
  8.     dateext  
  9.     sharedscripts  
  10.     postrotate  
  11.     /etc/init.d/nginx reload 
  12.     endscript  
  13.  
  14. [root@huanqiu_web1 ~]# ll /Data/logs/nginx/www.huanqiu.com/  
  15. .......... 
  16. -rw-r--r-- 1 root root      1652 Jan  1 00:00 error.log-20170101.gz  
  17. -rw-r--r-- 1 root root      1289 Jan  2 00:00 error.log-20170102.gz  
  18. -rw-r--r-- 1 root root      1633 Jan  3 00:00 error.log-20170103.gz  
  19. -rw-r--r-- 1 root root      3239 Jan  4 00:00 error.log-20170104.gz 

系統日志切割一例 

  1. [root@huanqiu_web1 ~]# cat /etc/logrotate.d/syslog  
  2. /var/log/cron  
  3. /var/log/maillog  
  4. /var/log/messages  
  5. /var/log/secure  
  6. /var/log/spooler  
  7.     sharedscripts  
  8.     postrotate  
  9.     /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true  
  10.     endscript  
  11.  
  12. [root@huanqiu_web1 ~]# ll /var/log/messages*  
  13. -rw------- 1 root root 34248975 Jan 19 18:42 /var/log/messages 
  14. -rw------- 1 root root 51772994 Dec 25 03:11 /var/log/messages-20161225  
  15. -rw------- 1 root root 51800210 Jan  1 03:05 /var/log/messages-20170101  
  16. -rw------- 1 root root 51981366 Jan  8 03:36 /var/log/messages-20170108  
  17. -rw------- 1 root root 51843025 Jan 15 03:40 /var/log/messages-20170115  
  18. [root@huanqiu_web1 ~]# ll /var/log/cron* 
  19. -rw------- 1 root root 2155681 Jan 19 18:43 /var/log/cron  
  20. -rw------- 1 root root 2932618 Dec 25 03:11 /var/log/cron-20161225  
  21. -rw------- 1 root root 2939305 Jan  1 03:06 /var/log/cron-20170101  
  22. -rw------- 1 root root 2951820 Jan  8 03:37 /var/log/cron-20170108  
  23. -rw------- 1 root root 3203992 Jan 15 03:41 /var/log/cron-20170115  
  24. [root@huanqiu_web1 ~]# ll /var/log/secure*  
  25. -rw------- 1 root root  275343 Jan 19 18:36 /var/log/secure  
  26. -rw------- 1 root root 2111936 Dec 25 03:06 /var/log/secure-20161225  
  27. -rw------- 1 root root 2772744 Jan  1 02:57 /var/log/secure-20170101  
  28. -rw------- 1 root root 1115543 Jan  8 03:26 /var/log/secure-20170108  
  29. -rw------- 1 root root  731599 Jan 15 03:40 /var/log/secure-20170115  
  30. [root@huanqiu_web1 ~]# ll /var/log/spooler* 
  31. -rw------- 1 root root 0 Jan 15 03:41 /var/log/spooler  
  32. -rw------- 1 root root 0 Dec 18 03:21 /var/log/spooler-20161225  
  33. -rw------- 1 root root 0 Dec 25 03:11 /var/log/spooler-20170101 
  34. -rw------- 1 root root 0 Jan  1 03:06 /var/log/spooler-20170108  
  35. -rw------- 1 root root 0 Jan  8 03:37 /var/log/spooler-20170115 

tomcat日志切割一例 

  1. [root@huanqiu-backup ~]# cat /etc/logrotate.d/tomcat  
  2. /Data/app/tomcat-7-huanqiu/logs/catalina.out {  
  3. rotate 14  
  4. daily  
  5. copytruncate  
  6. compress  
  7. notifempty  
  8. missingok  
  9.  
  10. [root@huanqiu-backup ~]# ll /Data/app/tomcat-7-huanqiu/logs/catalina.*  
  11. -rw-r--r--. 1 root root     0 Jan 19 19:11 /Data/app/tomcat-7-huanqiu/logs/catalina.out  
  12. -rw-r--r--. 1 root root 95668 Jan 19 19:11 /Data/app/tomcat-7-huanqiu/logs/catalina.out.1.gz 

早期用過的nginx日志處理一例 

  1. [root@letv-backup ~]# vim /letv/sh/cut_nginx_log.sh  
  2. #!/bin/bash  
  3. # 你的日志文件存放目錄  
  4. logs_path="/letv/logs/"  
  5. # 日志文件的名字,多個需要空格隔開  
  6. logs_names=(error access pv_access) 
  7. dates=`date -d "yesterday" +"%Y%m%d"`  
  8. mkdir -p ${logs_path}$dates/  
  9. num=${#logs_names[@]}  
  10. for((i=0;i<num;i++));do  
  11. mv ${logs_path}${logs_names[i]}.log ${logs_path}$dates/${logs_names[i]}.log  
  12. done  
  13. #nginx平滑重啟  
  14. kill -USR1 `cat /letv/logs/nginx/nginx.pid`    
  15. 結合crontab定時執行  
  16. [root@letv-backup ~]# crontab -e  
  17. #nginx日志切割  
  18. 00 00 * * * cd /letv/logs;/bin/bash /letv/sh/cut_nginx_log.sh > /dev/null 2>$1 

3、嘗試解決logrotate無法自動輪詢日志的辦法

現象說明:

使用logrotate輪詢nginx日志,配置好之后,發現nginx日志連續兩天沒被切割,這是為什么呢??

然后開始檢查日志切割的配置文件是否有問題,檢查后確定配置文件一切正常。

于是懷疑是logrotate預定的cron沒執行,查看了cron的日志,發現有一條Dec 7 04:02:01 www crond[18959]: (root) CMD (run-parts /etc/cron.daily)這樣的日志,證明cron在04:02分時已經執行/etc/cron.daily目錄下的程序。

接著查看/etc /cron.daily/logrotate(這是logrotate自動輪轉的腳本)的內容: 

  1. [root@huanqiu_test ~]# cat /etc/cron.daily/logrotate  
  2. #!/bin/sh  
  3. /usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1  
  4. EXITVALUE=$?  
  5. if [ $EXITVALUE != 0 ]; then  
  6.     /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"  
  7. fi  
  8. exit 0 

沒有發現異常,配置好的日志輪轉操作都是由這個腳本完成的,一切運行正常,腳本應該就沒問題。

直接執行命令: 

  1. [root@huanqiu_test ~]# /usr/sbin/logrotate /etc/logrotate.conf 

這些系統日志是正常輪詢了,但nginx日志卻還是沒輪詢。

接著強行啟動記錄文件維護操作,縱使logrotate指令認為沒有需要,應該有可能是logroate認為nginx日志太小,不進行輪詢。

故需要強制輪詢,即在/etc/cron.daily/logrotate腳本中將 -t 參數替換成 -f 參數 

  1. [root@huanqiu_test ~]# cat /etc/cron.daily/logrotate  
  2. #!/bin/sh  
  3. /usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1  
  4. EXITVALUE=$?  
  5. if [ $EXITVALUE != 0 ]; then  
  6.     /usr/bin/logger -f logrotate "ALERT exited abnormally with [$EXITVALUE]"  
  7. fi  
  8. exit  

最后最后重啟下cron服務: 

  1. [root@huanqiu_test ~]# /etc/init.d/crond restart  
  2. Stopping crond: [ OK ]  
  3. Starting crond: [ OK ] 

logrotate默認自動切割生效時間 

  1. Logrotate是基于CRON來運行的,其腳本是/etc/cron.daily/logrotate,實際運行時,Logrotate會調用配置文件/etc/logrotate.conf。  
  2. [root@test ~]# cat /etc/cron.daily/logrotate  
  3. #!/bin/sh  
  4. /usr/sbin/logrotate /etc/logrotate.conf  
  5. EXITVALUE=$?  
  6. if [ $EXITVALUE != 0 ]; then  
  7.     /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"  
  8. fi  
  9. exit 0  
  10. Logrotate是基于CRON運行的,所以這個時間是由CRON控制的,具體可以查詢CRON的配置文件/etc/anacrontab(老版本的文件是/etc/crontab)  
  11. [root@test ~]# cat /etc/anacrontab  
  12. # /etc/anacrontab: configuration file for anacron  
  13. # See anacron(8) and anacrontab(5) for details.  
  14. SHELL=/bin/sh  
  15. PATH=/sbin:/bin:/usr/sbin:/usr/bin  
  16. MAILTO=root  
  17. # the maximal random delay added to the base delay of the jobs  
  18. RANDOM_DELAY=45                                                                  //這個是隨機的延遲時間,表示最大45分鐘  
  19. # the jobs will be started during the following hours only  
  20. START_HOURS_RANGE=3-22                                                           //這個是開始時間 
  21. #period in days   delay in minutes   job-identifier   command  
  22. 1 5 cron.daily    nice run-parts /etc/cron.daily 
  23. 7 25  cron.weekly   nice run-parts /etc/cron.weekly  
  24. @monthly 45 cron.monthly    nice run-parts /etc/cron.monthly  
  25. 第一個是Recurrence period  
  26. 第二個是延遲時間  
  27. 所以cron.daily會在3:22+(5,45)這個時間段執行,/etc/cron.daily是個文件夾  
  28. 通過默認/etc/anacrontab文件配置,會發現logrotate自動切割日志文件的默認時間是凌晨3點多。 
  29. ================================================================================================== 
  30. 現在需要將切割時間調整到每天的晚上12點,即每天切割的日志是前一天的0-24點之間的內容。  
  31. 操作如下:  
  32. [root@kevin ~]# mv /etc/anacrontab /etc/anacrontab.bak          //取消日志自動輪轉的設置  
  33. [root@G6-bs02 logrotate.d]# cat nstc_nohup.out  
  34. /data/nstc/nohup.out {  
  35. rotate 30 
  36. dateext  
  37. daily  
  38. copytruncate  
  39. compress  
  40. notifempty  
  41. missingok  
  42.  
  43. [root@G6-bs02 logrotate.d]# cat syslog  
  44. /var/log/cron  
  45. /var/log/maillog  
  46. /var/log/messages  
  47. /var/log/secure  
  48. /var/log/history 
  49.  
  50.     sharedscripts  
  51.     compress  
  52.     rotate 30  
  53.     daily 
  54.     dateext  
  55.     postrotate  
  56.     /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true  
  57.     endscript  
  58.  
  59. 結合crontab進行自定義的定時輪轉操作  
  60. [root@kevin ~]# crontab -l  
  61. #log logrotate  
  62. 59 23 * * * /usr/sbin/logrotate -f /etc/logrotate.d/syslog >/dev/null 2>&1  
  63. 59 23 * * * /usr/sbin/logrotate -f /etc/logrotate.d/nstc_nohup.out >/dev/null 2>&1 
  64. [root@G6-bs02 ~]# ll /data/nstc/nohup.out*  
  65. -rw------- 1 app app 33218 1月  25 09:43 /data/nstc/nohup.out  
  66. -rw------- 1 app app 67678 1月  25 23:59 /data/nstc/nohup.out-20180125.gz 

除了利用自帶的Logrotate工具實現日志切割之外,還可以編寫python腳本或shell腳本以實現日志切割。下面就簡單列出幾個實例說明下:

一、Python腳本實現日志切割 

  1. 實例1:對jumpserver日志進行切割  
  2. [root@test-vm01 mnt]# cat log_rotate.py  
  3. #!/usr/bin/env python  
  4. import datetime,os,sys,shutil  
  5. log_path = '/opt/jumpserver/logs/'  
  6. log_file = 'jumpserver.log'  
  7. yesterday = (datetime.datetime.now() - datetime.timedelta(days = 1))  
  8. try:  
  9.     os.makedirs(log_path + yesterday.strftime('%Y') + os.sep + \  
  10.                 yesterday.strftime('%m'))  
  11. except OSError,e:  
  12.     print  
  13.     print e  
  14.     sys.exit()   
  15. shutil.move(log_path + log_file,log_path \  
  16.             + yesterday.strftime('%Y') + os.sep \  
  17.             + yesterday.strftime('%m') + os.sep \  
  18.             + log_file + '_' + yesterday.strftime('%Y%m%d') + '.log')  
  19. os.popen("sudo /opt/jumpserver/service.sh restart")  
  20. 手動執行這個腳本:  
  21. [root@test-vm01 mnt]# chmod 755 log_rotate.py  
  22. [root@test-vm01 mnt]# python log_rotate.py 
  23. 查看日志切割后的效果:  
  24. [root@test-vm01 mnt]# ls /opt/jumpserver/logs/  
  25. 2017  jumpserver.log   
  26. [root@test-vm01 mnt]# ls /opt/jumpserver/logs/2017/  
  27. 09  
  28. [root@test-vm01 mnt]# ls /opt/jumpserver/logs/2017/09/  
  29. jumpserver.log_20170916.log  
  30. 然后做每日的定時切割任務:  
  31. [root@test-vm01 mnt]# crontab -e  
  32. 30 1 * * * /usr/bin/python /mnt/log_rotate.py > /dev/null 2>&1  
  33. --------------------------------------------------------------------------------------  
  34. 實例2:對nginx日志進行切割  
  35. [root@test-vm01 mnt]# vim log_rotate.py  
  36. #!/usr/bin/env python  
  37. import datetime,os,sys,shutil  
  38. log_path = '/app/nginx/logs/'  
  39. log_file = 'www_access.log'  
  40. yesterday = (datetime.datetime.now() - datetime.timedelta(days = 1))  
  41. try:  
  42.     os.makedirs(log_path + yesterday.strftime('%Y') + os.sep + \  
  43.                 yesterday.strftime('%m'))  
  44. except OSError,e:  
  45.     print  
  46.     print e  
  47.     sys.exit()   
  48. shutil.move(log_path + log_file,log_path \  
  49.             + yesterday.strftime('%Y') + os.sep \  
  50.             + yesterday.strftime('%m') + os.sep \  
  51.             + log_file + '_' + yesterday.strftime('%Y%m%d') + '.log') 
  52. os.popen("sudo kill -USR1 `cat /app/nginx/logs/nginx.pid`")  
  53. --------------------------------------------------------------------------------------  
  54. 其他業務日志的切割腳本跟上面做法相同 

二、shell腳本實現日志切割 

  1. [root@qd-vpc-op-consumer01 ~]# cat /app/script/log_rotate.sh  
  2. #!/bin/sh  
  3. function rotate() {  
  4. logs_path=$1  
  5. echo Rotating Log: $1  
  6. cp ${logs_path} ${logs_path}.$(date -d "yesterday" +"%Y%m%d")  
  7. > ${logs_path}  
  8.     rm -f ${logs_path}.$(date -d "7 days ago" +"%Y%m%d")  
  9.  
  10. for i in $*  
  11. do  
  12.         rotate $i  
  13. done  
  14. --------------------------------------------------------------------------------------------------------------  
  15. 每天定時切割日志的任務制定(比如對python的一個業務/data/log/xcspam/下的日志進行切割,0K的日志不進行切割):  
  16. [root@qd-vpc-op-consumer01 ~]# crontab -e  
  17. #xcspam 日志切割  
  18. 30 0 * * * find /data/log/xcspam/ -size +0 -name '*.log' | xargs /app/script/log_rotate.sh  
  19. 手動執行切割:  
  20. [root@qd-vpc-op-consumer01 ~]# find /data/log/xcspam/ -size +0 -name '*.log' | xargs /app/script/log_rotate.sh  
  21. 切割后的日志效果:  
  22. [root@qd-vpc-op-consumer01 ~]# ls /data/log/xcspam/  
  23. xcspam_error.log  xcspam_error.log-20170926  
  24. --------------------------------------------------------------------------------------------------------------  
  25. 比如對maridb日志進行切割  
  26. [root@qd-vpc-op-consumer01 ~]# crontab -e  
  27. #xcspam 日志切割  
  28. 30 0 * * * find /var/log/mariadb/ -size +0 -name '*.log' | xargs /app/script/log_rotate.sh  
  29. [root@qd-vpc-op-consumer01 ~]# find /var/log/mariadb/ -size +0 -name '*.log' | xargs /app/script/log_rotate.sh  
  30. [root@qd-vpc-op-consumer01 ~]# ll /var/log/mariadb/  
  31. 總用量 8  
  32. -rw-r-----. 1 mysql mysql    0 9月  17 20:31 mariadb.log  
  33. -rw-r-----. 1 root  root  4532 9月  17 20:31 mariadb.log.20170916  
  34. -------------------------------------------------------------------------------------------------------------- 

日志壓縮腳本: 

  1. [root@localhost ~]# ls /var/log/fss/nginx/  
  2. nginx.20190506.log  nginx.20190507.log  nginx.20190508.log  
  3. [root@localhost ~]# cat /root/log_clean.sh  
  4. #!/usr/bin/sh  
  5. #根據系統/服務/日志保留天數三個參數壓縮日志  
  6. #usage: sh clearlog.sh sysname appname keepdays  
  7. sysName=$1  
  8. appName=$2  
  9. keepDay=$3  
  10. logDir=/var/log/${sysName}/${appName}  
  11. logFile=${appName}.*[0-9][0-9].log  
  12. cd ${logDir}  
  13. find ./ -name "${logFile}" -mtime -${keepDay} -exec gzip {} \;  
  14. [root@localhost ~]# sh /root/log_clean.sh fss nginx 3 
  15. [root@localhost ~]# ls /var/log/fss/nginx/  
  16. nginx.20190506.log.gz  nginx.20190507.log.gz  nginx.20190508.log.gz  
  17. 還可以針對日志保留策略,調整成日志清理腳本。 

推薦用的Nginx日志輪轉方法   [部署在nginx的日志目錄下] 

  1. #!/bin/bash  
  2. yesterday=`date -d "-1 days" +'%Y%m%d'`  
  3. cd `dirname $0`  
  4. basedir=`pwd`  
  5. logdir="${basedir}/bak"  
  6. bindir="${basedir%/*}/sbin"  
  7. mkdir -p ${logdir}  
  8. for log in `ls *.log 2>/dev/null`  
  9. do  
  10.     mv ${log} ${logdir}/${log}.${yesterday}.bak  
  11.     # gzip ${logdir}/${log}.${yesterday}  
  12. done  
  13. ${bindir}/nginx -s reload 
  14. cd ${logdir}
  15. find . -type f -name "*.bak" -mtime +7 | xargs rm -f 

 

責任編輯:龐桂玉 來源: 良許Linux
相關推薦

2020-05-22 15:45:30

Linuxlogrotate神器

2011-01-11 11:32:20

Linuxlogrotate配置

2025-04-29 08:25:00

logrotateLinux日志輪轉

2009-12-08 12:10:30

2025-04-24 10:34:45

2021-12-24 10:15:22

Linux命令lsof

2021-07-30 05:51:53

移動應用PerfDog工具

2021-06-02 11:41:54

LinuxTmux命令

2023-11-10 09:16:45

SpringBootThymeleaf

2014-04-11 11:13:15

CollectlLinux系統監控

2015-07-28 10:31:48

2013-04-10 10:59:45

Linux系統監控collectl

2022-02-11 07:45:10

Linuxsmem系統

2020-10-21 10:50:24

LVSNginxHAProxy

2011-04-21 17:29:13

Linuxgssftp

2021-10-22 14:23:02

logrotateLinux 命令Linux

2021-11-24 22:41:00

微軟工具Windows 10

2024-10-14 16:53:06

2022-09-26 14:24:18

Linux網絡流量審計

2021-09-27 13:02:10

Linux工具命令
點贊
收藏

51CTO技術棧公眾號

国产精品va无码一区二区三区| 狠狠干狠狠操视频| 青青草观看免费视频在线| 亚洲一区亚洲| 一区二区三区无码高清视频| 手机在线看福利| 午夜伦理在线| 国产精品一卡二卡在线观看| 欧美精品国产精品日韩精品| 7788色淫网站小说| 成人软件在线观看| 亚洲欧洲日韩女同| 国产一区不卡在线观看| 黄色一级视频免费看| 久久亚洲在线| 精品国产乱码91久久久久久网站| 精品久久久久久久久久中文字幕| 成人免费在线观看| 国产精品一区二区黑丝| 8x海外华人永久免费日韩内陆视频| 久久国产柳州莫菁门| 国产成人精选| 亚洲成人中文在线| 亚洲砖区区免费| 成人午夜视频一区二区播放| 性感少妇一区| 色综合男人天堂| 在线国产视频一区| 成人精品国产亚洲| 精品久久久久久久久久ntr影视| 翔田千里亚洲一二三区| 熟妇人妻中文av无码| 蜜臀久久99精品久久久久宅男 | 亚洲精品欧美激情| 免费成人看片网址| 国产伦子伦对白视频| 久久国产一二区| 欧美多人爱爱视频网站| 99久久久无码国产精品衣服| 精品国产18久久久久久二百| 91久久精品一区二区三| 日本男女交配视频| 久热国产在线| 国产色91在线| 狠狠综合久久av| 国产乱码精品一区二三区蜜臂 | 久久爱av电影| 亚洲精品视频91| 国产精品一区二区你懂的| 91精品在线观看视频| 亚洲天堂aaa| 日本aⅴ亚洲精品中文乱码| 奇米4444一区二区三区 | 欧美熟乱第一页| 欧美性猛交久久久乱大交小说| 国产高清视频色在线www| 亚洲在线一区二区三区| 大胆欧美熟妇xx| 国产蜜臀在线| 天天av天天翘天天综合网| 秋霞无码一区二区| 色网在线免费观看| 91激情五月电影| 国产 porn| 四虎精品永久免费| 911精品产国品一二三产区 | 91麻豆免费视频| 欧美系列一区| 在线视频三区| 亚洲黄色免费电影| 男人插女人视频在线观看| 国产高潮在线| 91福利在线看| 亚洲三级在线观看视频| 久久wwww| 亚洲国模精品私拍| av手机在线播放| 亚洲成人av| 久久久久久久久国产精品| 日韩高清精品免费观看| 玖玖精品视频| 成人在线免费观看视视频| 亚洲黄色精品视频| 26uuu亚洲综合色欧美 | 成人午夜影视| 亚洲精品国产高清久久伦理二区| 日本免费a视频| 欧美日韩美女| 欧美一区二区女人| 一级特级黄色片| 成人在线免费观看91| 久久躁日日躁aaaaxxxx| 国产成人无码精品亚洲| 久久精品国内一区二区三区| 97超碰人人看人人| 久久久久久久影视| 亚洲精品视频自拍| 欧美私人情侣网站| 一区二区三区四区精品视频| 亚洲男女性事视频| 亚洲欧美一区二区三区四区五区| 99精品国产99久久久久久福利| 国产精品久久久一区| 亚洲国产精品18久久久久久| 中文天堂在线一区| 青青青免费在线| 国产麻豆一区二区三区| 精品香蕉在线观看视频一| 国产免费久久久久| 日韩黄色小视频| 国产区一区二区| 欧美jizz18性欧美| 色94色欧美sute亚洲线路一久 | 日韩一级淫片| 国产一区二区免费| 精品成人久久久| 国产剧情一区在线| 污视频在线免费观看一区二区三区| 欧美极品少妇videossex| 欧美午夜精品久久久久久超碰 | 欧美激情精品久久久久久久变态| 在线视频精品免费| 99精品视频在线免费观看| 午夜啪啪福利视频| 日韩三区四区| 在线看国产精品| 国产专区第一页| 国产成人小视频| 欧美aaa在线观看| 久久久人成影片一区二区三区在哪下载| 日韩一级二级三级精品视频| 亚洲a∨无码无在线观看| 久久婷婷激情| 久久伊人资源站| 97天天综合网| 精品国产乱码久久久久久久久| 暗呦丨小u女国产精品| 免费成人在线网站| 日韩av影视| 韩国主播福利视频一区二区三区| 亚洲成人精品久久| 久久精品亚洲无码| 国产v综合v亚洲欧| 8x8ⅹ国产精品一区二区二区| 欧美系列精品| 中日韩午夜理伦电影免费 | 久久久久久国产精品一区| 久操av在线| 精品少妇一区二区三区视频免付费 | 一级特黄aa大片| 欧美国产精品v| 亚洲第一中文av| 91视频一区| 成人妇女淫片aaaa视频| 色综合久久久久综合一本到桃花网| 色欧美片视频在线观看在线视频| 丰满大乳奶做爰ⅹxx视频| 久久精品一区二区| 日本欧美国产在线| 精品久久av| 日本道精品一区二区三区| a级大片在线观看| 巨乳诱惑日韩免费av| 日本一区不卡| 国产私拍福利精品视频二区| 中文字幕亚洲欧美一区二区三区| 亚洲天堂中文网| 日韩一区在线免费观看| 欧美一级特黄aaa| 欧美 日韩 国产一区二区在线视频| 成人淫片在线看| 欧美6一10sex性hd| 国产视频自拍一区| 自拍偷拍精品视频| 亚洲欧美日韩国产手机在线| 五月天六月丁香| 极品中文字幕一区| 麻豆精品传媒视频| 日本午夜免费一区二区| 久久久久久久久久久亚洲| 日本韩国一区| 欧美一区二区三区白人| 国产一区二区99| 中文字幕亚洲区| 人妻激情偷乱频一区二区三区| 久久一二三四| 国产欧美自拍视频| 国产欧美一区二区精品久久久| 成人网在线免费观看| 2020国产在线| 色爱av美腿丝袜综合粉嫩av| 亚洲乱熟女一区二区| 91久久一区二区| 久久网一区二区| 国产精品无遮挡| 中文字幕第3页| 狠狠色丁香久久婷婷综合_中 | 一本久久综合| 亚洲啪啪av| 麻豆精品av| 92看片淫黄大片看国产片| 天堂√中文最新版在线| 久久精品国产成人| 欧美成熟毛茸茸| 日韩视频不卡中文| 中文字幕一区二区久久人妻| 天涯成人国产亚洲精品一区av| 欧美aaa级片| 成人avav在线| 污污的视频免费| 一本色道久久综合亚洲精品不| 中文字幕成人一区| 亚州综合一区| 亚洲影影院av| 成人福利一区二区| 青草青草久热精品视频在线网站 | 无码 制服 丝袜 国产 另类| 国产精品密蕾丝视频下载| 国产精品主播视频| 国产精品蜜芽在线观看| 插插插亚洲综合网| 久久精品蜜桃| 日韩福利在线播放| 精品人妻一区二区三区三区四区 | 男人和女人啪啪网站| 91精品国产视频| 青青草国产精品| 欧美日韩另类图片| 国产一区二区免费在线观看| av在线播放一区二区| 庆余年2免费日韩剧观看大牛| xxxx另类黑人| 久久综合88中文色鬼| 人妻一区二区三区免费| 91麻豆精品91久久久久久清纯 | 欧美熟妇激情一区二区三区| 成人精品一区二区三区中文字幕| 亚洲理论中文字幕| 国产精品一二| 日本在线xxx| 亚洲成人中文| 精品视频在线观看一区二区| 久久久久国产精品| 亚洲午夜精品一区二区三区| 妖精视频一区二区三区| 国产伦精品一区二区三区| 亚洲一区 二区| 96pao国产成视频永久免费| 青草综合视频| 国产欧美一区二区白浆黑人| 一二区成人影院电影网| 欧美与欧洲交xxxx免费观看 | √…a在线天堂一区| 欧美一区二区三区粗大| 国产三级一区二区| 国产人妻大战黑人20p| 国产婷婷色一区二区三区四区| 极品粉嫩小仙女高潮喷水久久| 不卡电影一区二区三区| 精品无码人妻少妇久久久久久| 成人av网址在线观看| 色婷婷精品久久二区二区密| 不卡的电视剧免费网站有什么| 人人妻人人澡人人爽人人精品 | 国产精品入口麻豆| 波多野结衣在线一区| 久久精品女同亚洲女同13| 99麻豆久久久国产精品免费| 朝桐光av一区二区三区| 欧美国产日产图区| 日韩精品久久久久久久的张开腿让| 国产精品三级视频| 欧美成人精品激情在线视频| 亚洲综合成人在线视频| 精国产品一区二区三区a片| 一区二区三区精品| 国产99久久久| 欧美少妇xxx| 国产人妖一区二区三区| 日韩精品极品在线观看| 国产三级视频在线| 久久精品国产欧美激情| а√天堂中文在线资源8| 2019中文字幕在线| 成人免费毛片嘿嘿连载视频…| 国产精品久久久久久久一区探花| 精品中文在线| 久久99久久精品国产| 日韩欧美网站| 日本在线xxx| 日本亚洲欧美天堂免费| 国产一级片中文字幕| 91一区二区在线| 免费黄色片网站| 亚洲日本va午夜在线影院| 日韩不卡视频在线| 欧美日韩另类国产亚洲欧美一级| 国产老妇伦国产熟女老妇视频| 日韩av在线精品| 日本在线免费中文字幕| 午夜精品一区二区三区av| 欧美xxxhd| 国产精品久久久久久久久久ktv| 亚洲欧洲专区| 久久久久久九九| 国产精品地址| 亚洲福利精品视频| 成人一区在线观看| 成人在线观看小视频| 日韩欧美一区二区在线| av中文字幕免费| 伊人一区二区三区久久精品| 91黄页在线观看| 91久久精品一区| 日本不卡二三区| 欧美日韩性生活片| 狠狠久久亚洲欧美| 日本综合在线观看| 欧美日韩国产在线看| av中文字幕播放| 久久视频在线免费观看| 成人自拍av| 精品久久sese| 亚洲国产高清视频| 一区二区久久精品| 欧美国产精品一区二区三区| 亚洲 欧美 中文字幕| 亚洲国产精品嫩草影院久久| 18加网站在线| 91久热免费在线视频| 国际精品欧美精品| ww国产内射精品后入国产| 成人性生交大合| 国产一区二区视频在线观看免费| 欧美在线综合视频| 黄色在线播放| 欧美怡红院视频一区二区三区 | 日本一区免费在线观看| 影音先锋中文字幕一区| 亚洲五月激情网| 亚洲天堂精品在线观看| 黄色大全在线观看| 亚洲乱码国产乱码精品精天堂| 人在线成免费视频| 国产欧美日韩在线播放| 亚洲欧美亚洲| 免费黄色av网址| 一区二区三区四区在线| 中文字幕日韩三级| 日韩在线观看免费高清完整版| 日本精品裸体写真集在线观看| 精品国产一区二区三| 久久久久国产精品一区三寸| 右手影院亚洲欧美| 午夜精品久久久久久久久久久| 五月婷婷丁香六月| 98精品国产高清在线xxxx天堂| 日韩一级电影| 久久网站免费视频| 91亚洲大成网污www| 探花视频在线观看| 亚洲欧洲在线视频| 台湾佬成人网| 亚洲第一在线综合在线| 蜜桃视频一区二区三区| 欧美日韩国产黄色| 欧美一二三四区在线| 羞羞视频在线观看不卡| 91在线观看免费高清| 亚洲福利精品| 黄色av网址在线观看| 欧美专区亚洲专区| 在线免费av网站| 成人黄色免费网站在线观看| 国产精品v亚洲精品v日韩精品 | 成人v精品蜜桃久久一区| 99热在线观看免费精品| 在线看片第一页欧美| 伊人亚洲精品| 成人在线观看你懂的| 国产日韩欧美制服另类| 97在线视频人妻无码| 97在线精品国自产拍中文| 国产亚洲欧美日韩在线观看一区二区 | 国产精品qvod| 国产黄色特级片| 国产欧美精品一区二区色综合朱莉| 少妇又紧又色又爽又刺激视频| 久久久精品亚洲| 性欧美lx╳lx╳| 国产免费中文字幕| 亚洲精品免费在线观看| 欧美日韩激情视频一区二区三区| 国产精品久久久久久婷婷天堂 | 精品国产一区二区三区四区在线观看 | av电影在线观看不卡| 精品成人无码久久久久久| 久久成年人视频| 亚洲第一福利专区| 亚洲丝袜在线观看|