logrotate是一個日誌管理程序,用來把舊的日誌文件刪除(備份),並建立新的日誌文件,這個過程稱爲「轉儲」。咱們能夠根據日誌的大小,或者根據其使用的天數來轉儲。 |
logrotate 的執行由crond服務實現。在/etc/cron.daily目錄中,有個文件logrotate,它其實是個shell script,用來啓動logrotate。logrotate程序天天由cron在指定的時間(/etc/crontab)啓動。所以,使用ps是沒法查看到logrotate的。若是它沒有起來,就要查看一下crond服務有沒有在運行。在執行logrotate時,須要指定其配置文件/etc/logrotate.conf。這 個配置文件的註釋寫得很清楚,沒有必要再羅嗦了。只想強調下面這行,它的做用包含存放在/etc/logrotate.d目錄下面的配置文件,不可或缺。 若是你安裝了一個新的服務,它的日誌轉儲的規則能夠創建一個專門的配置文件,放在/etc/logrotate.d下面。它其實也由於下面的這句話,在 logrotate服務啓動時被讀取。php
每一個存放在/etc/logrotate.d目錄裏的文件,都有上面格式的配置信息。在{}中定義的規則,若是與logrotate.conf中的衝突,以/etc/logrotatate.d/中的文件定義的爲準。node
Logrotate的運行分爲三步,判斷系統的日誌文件,創建轉儲計劃以及參數,經過cron daemon 運行下面的代碼是 Red Hat Linux缺省的crontab 來天天運行logrotate。logrotate啓動腳本放在/etc/cron.daily/logrotate中.linux
#!/bin/sh test -x /usr/sbin/logrotate || exit 0 /usr/sbin/logrotate /etc/logrotate.conf
可人工執行命令進行測試:nginx
/usr/sbin/logrotate -f /etc/logrotate.conf
看一下主配置文件/etc/logrotate.conf的參數解釋:shell
# see "man logrotate" for details # rotate log files weekly weekly #每週輪轉一次 # keep 4 weeks worth of backlogs rotate 4 #保留四個日誌文件 # create new (empty) log files after rotating old ones create #rotate後,建立一個新的空文件 # uncomment this if you want your log files compressed #compress #默認是不壓縮的 # RPM packages drop log rotation information into this directory include /etc/logrotate.d #這個目錄下面配置文件生效 # no packages own wtmp — we’ll rotate them here /var/log/wtmp { #定義/var/log/wtmp這個日誌文件; monthly #每個月輪轉一次,取代了上面的全局設定的每週輪轉一次; minsize 1M #定義日誌必需要大於1M大小纔會去輪轉; create 0664 root utmp #新的日誌文件的權限,屬主,屬主; rotate 1 #保留一個,取代了上面的全局設定的保留四個; } /var/log/btmp { #定義/var/log/btmp這個日誌文件; missingok #若是日誌丟失, 不報錯; monthly create 0600 root utmp rotate 1 }
若是在對應的文件下沒有設定對應的參數,那麼此日誌會繼承全局配置參數,如:/var/log/btmp文件沒有指定monthly,那麼機會繼承全局參數weekly進行日誌輪換了。tomcat
daily #指定轉儲週期爲天天 weekly #指定轉儲週期爲每週; monthly #指定轉儲週期爲每個月; rotate count #指定日誌文件刪除以前轉儲的次數,0指沒有備份,5指保留5個備份; compress #經過gzip壓縮轉儲之後的日誌; nocompress #不須要壓縮時,用這個參數; delaycompress #延遲壓縮,和compress一塊兒使用時,轉儲的日誌文件到下一次轉儲時才壓縮; nodelaycompress #覆蓋delaycompress選項,轉儲同時壓縮; copytruncate #用於還在打開中的日誌文件,把當前日誌備份並截斷; nocopytruncate #備份日誌文件可是不截斷; create mode owner group #轉儲文件,使用指定的文件模式建立新的日誌文件; nocreate #不創建新的日誌文件; errors address #專儲時的錯誤信息發送到指定的Email地址; ifempty #即便是空文件也轉儲,這個是logrotate的缺省選項; notifempty #若是是空文件的話,不轉儲; mail address #把轉儲的日誌文件發送到指定的E-mail地; nomail #轉儲時不發送日誌文件; olddir directory #轉儲後的日誌文件放入指定的目錄,必須和當前日誌文件在同一個文件系統; noolddir #轉儲後的日誌文件和當前日誌文件放在同一個目錄下; prerotate/endscript #在轉儲之前須要執行的命令能夠放入這個對,這兩個關鍵字必須單獨成行; postrotate/endscript #在轉儲之後須要執行的命令能夠放入這個對,這兩個關鍵字必須單獨成行; tabootext [+] list #讓logrotate不轉儲指定擴展名的文件,缺省的擴展名是:.rpm-orig, .rpmsave,v,和~ ; size size #當日志文件到達指定的大小時才轉儲,Size能夠指定bytes(缺省)以及KB(sizek)或者MB(sizem); postrotate #日誌輪換事後指定指定的腳本,endscript參數表示結束腳本; sharedscripts #共享腳本,下面的postrotate中的腳本只執行一次便可;
以上參數均可以已定義在全局配置,或者指定爲某個日誌文件對的配置,但注意使用時參數之間不要衝突。php-fpm
一個新系統準備上線前,應該作好如下日誌的配置,配置到/etc/logrotate.d/目錄下便可。post
/var/log/syslog { rotate 7 #保留7份日誌文件; daily #天天輪換一次; missingok #若是日誌丟失,不報錯; minsize 10M #定義日誌必須大於10M纔會去輪換; notifempty #若是是空文件就不進行轉存; compress #壓縮日誌; delaycompress #延遲壓縮,和compress一塊兒使用時,轉儲的日誌文件到下一次轉儲時才壓縮; postrotate #輪換事後重啓rsyslog服務; invoke-rc.d rsyslog rotate > /dev/null endscript #結束腳本; } /var/log/mail.info /var/log/mail.warn /var/log/mail.err /var/log/mail.log /var/log/daemon.log /var/log/kern.log /var/log/auth.log /var/log/user.log /var/log/lpr.log /var/log/cron.log /var/log/debug /var/log/messages { rotate 4 weekly missingok notifempty compress delaycompress sharedscripts #共享腳本,下面的postrotate腳本只執行一次便可; postrotate invoke-rc.d rsyslog rotate > /dev/null endscript }
在定義日誌文件時也可使用通配符,但最好少用通配符,因會它會包括已經切換過的日誌,要用的話最好在*號後加上擴展名, 如*.log。測試
通常除了這些系統日誌須要配置一下,還有一些應用日誌以及組件日誌可能也須要配置,如Nginx、php、tomcat、zabbix-agent等。this
/var/log/nginx/*log { daily rotate 10 missingok notifempty compress sharedscripts su root postrotate /bin/kill -USR1 $(cat /var/run/nginx.pid 2>/dev/null) 2>/dev/null || : endscript }
/var/log/php-fpm/*log { missingok notifempty sharedscripts delaycompress create 0664 www www postrotate /bin/kill -SIGUSR1 `cat /var/run/php-fpm/php-fpm.pid 2>/dev/null` 2>/dev/null || true endscript }