閱讀746 返回首頁    go 小米 go 小米 note


Linux下Tomcat catalina.out自動歸檔,以及logrotate 配置詳解

Linux下Tomcat catalina.out自動歸檔


如果 catalina.out 日誌達到 2GB 大小的時候,Tomcat 因為緩存問題,便沒有辦法繼續輸出日誌了。 
為了避免這種情況,你需要及時對 catalina.out  進行歸檔。 
實際上 Tomcat 自身也會對日誌內容進行歸檔,但是歸檔後,Tomcat 不會清理 catalina.out 的內容,這將會導致 catalina.out 越來越大。 
下麵的方法能夠使用在 linux/unix 的機器上。 
如果我們期望每天對日誌進行歸檔,我們可以按照下麵的方法進行配置: 

執行命令:

vi /etc/logrotate.d/tomcat 

輸入下麵的內容:

/usr/local/tomcat/logs/catalina.out {  
 copytruncate  
 daily  
 dateext  
 nocompress  
 missingok  
}


完成上麵的工作後,你可以不需要在你的操作係統中做任何工作,日誌歸檔程序將會每天對你的日誌進行歸檔的。 

執行下麵一個命令:

/usr/sbin/logrotate -f /etc/logrotate.conf

logrotate 也可以直接執行 後直接跟配置文件就可以了。
-v 給出詳細信息
-d debug模式,不更改日誌文件內容 模擬執行
-f 強製執行,忽略所有規則


程序歸檔的結果如下: 
你可以看到在 Tomcat 的日誌目錄下創建了一個文件: 
-rw-rw-r-- 1 tomcat tomcat   133540 Jul 13 09:39 catalina.out-20110713 
這個就是我們幾天內的歸檔文件。 
關於參數的說明: 
重要的參數: 
dateext: 在歸檔文件後,將會使用日期進行標注。如果這參數不指定的話,歸檔文件將會標注為數字。 
如下麵的內容: 
-rw-rw-r-- 1 tomcat tomcat 33790228 Jul 13 09:33 catalina.out.1 


有人會問,這個是每天的時候執行歸檔的呢?

1、查看係統默認的定時任務配置:cat /etc/crontab

可以看到有這麼一條【02 4 * * * root run-parts /etc/cron.daily】內容,這是係統默認的每天淩晨4點02分執行調度任務

2、我們到目錄【/etc/cron.daily】下麵,可以看到 logrotate 這個文件。


那如何自己定義歸檔時間?(一般不需要)

很簡單,我們刪除/etc/cron.daily/logrotate 然後編輯/etc/crontab文件 指定自己的時間執行下麵的命令即可。

/usr/sbin/logrotate -f /etc/logrotate.conf


===========================================================================


logrotate 配置詳解

 對於Linux 的係統安全來說,日誌文件是極其重要的工具。係統管理員可以使用logrotate 程序用來管理係統中的最新的事件,對於Linux 的係統安全來說,日誌文件是極其重要的工具。係統管理員可以使用logrotate 程序用來管理係統中的最新的事件。logrotate 還可以用來備份日誌文件,本篇將通過以下幾部分來介紹

 

日誌文件的管理:
1、logrotate 配置
2、缺省配置 logrotate
3、使用include 選項讀取其他配置文件
4、使用include 選項覆蓋缺省配置
5、為指定的文件配置轉儲參數
一、logrotate 配置

logrotate 程序是一個日誌文件管理工具。用來把舊的日誌文件刪除,並創建新的日誌文件,我們把它叫做“轉儲”。我們可以根據日誌文件的大小,也可以根據其天數來轉儲,這個過程一般通過 cron 程序來執行。
logrotate 程序還可以用於壓縮日誌文件,以及發送日誌到指定的E-mail 。

logrotate 的配置文件是 /etc/logrotate.conf。主要參數如下表:

參數 功能
compress 通過gzip 壓縮轉儲以後的日誌
nocompress 不需要壓縮時,用這個參數
copytruncate 用於還在打開中的日誌文件,把當前日誌備份並截斷
nocopytruncate 備份日誌文件但是不截斷
create mode owner group 轉儲文件,使用指定的文件模式創建新的日誌文件
nocreate 不建立新的日誌文件
delaycompress 和 compress 一起使用時,轉儲的日誌文件到下一次轉儲時才壓縮
nodelaycompress 覆蓋 delaycompress 選項,轉儲同時壓縮。
errors address 專儲時的錯誤信息發送到指定的Email 地址
ifempty 即使是空文件也轉儲,這個是 logrotate 的缺省選項。
notifempty 如果是空文件的話,不轉儲
mail address 把轉儲的日誌文件發送到指定的E-mail 地址
nomail 轉儲時不發送日誌文件
olddir directory 轉儲後的日誌文件放入指定的目錄,必須和當前日誌文件在同一個文件係統
noolddir 轉儲後的日誌文件和當前日誌文件放在同一個目錄下
prerotate/endscript 在轉儲以前需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行
postrotate/endscript 在轉儲以後需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行
daily 指定轉儲周期為每天
weekly 指定轉儲周期為每周
monthly 指定轉儲周期為每月
rotate count 指定日誌文件刪除之前轉儲的次數,0 指沒有備份,5 指保留5 個備份
tabootext [+] list 讓logrotate 不轉儲指定擴展名的文件,缺省的擴展名是:.rpm-orig, .rpmsave, v, 和 ~
size size 當日誌文件到達指定的大小時才轉儲,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem).
二、缺省配置 logrotate

logrotate 缺省的配置募?/etc/logrotate.conf。
Red Hat Linux 缺省安裝的文件內容是:

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# send errors to root
errors root
# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress
1
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own lastlog or wtmp --we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}

/var/log/lastlog {
monthly
rotate 1
}

# system-specific logs may be configured here


缺省的配置一般放在logrotate.conf 文件的最開始處,影響整個係統。在本例中就是前麵12行。

第三行weekly 指定所有的日誌文件每周轉儲一次。
第五行 rotate 4 指定轉儲文件的保留 4份。
第七行 errors root 指定錯誤信息發送給root。
第九行create 指定 logrotate 自動建立新的日誌文件,新的日誌文件具有和
原來的文件一樣的權限。
第11行 #compress 指定不壓縮轉儲文件,如果需要壓縮,去掉注釋就可以了。

三、使用include 選項讀取其他配置文件
include 選項允許係統管理員把分散到幾個文件的轉儲信息,集中到一個
主要的配置文件。當 logrotate 從logrotate.conf 讀到include 選項時,會從指定文件讀入配置信息,就好像他們已經在/etc/logrotate.conf 中一樣。

第13行 include /etc/logrotate.d 告訴 logrotate 讀入存放在/etc/logrotate.d 目錄中的日誌轉儲參數,當係統中安裝了RPM 軟件包時,使用include 選項十分有用。RPM 軟件包的日誌轉儲參數一般存放在/etc/logrotate.d 目錄。

include 選項十分重要,一些應用把日誌轉儲參數存放在 /etc/logrotate.d 。

典型的應用有:apache, linuxconf, samba, cron 以及syslog。

這樣,係統管理員隻要管理一個 /etc/logrotate.conf 文件就可以了。


 

 


 

四、使用include 選項覆蓋缺省配置

當 /etc/logrotate.conf 讀入文件時,include 指定的文件中的轉儲參數將覆蓋缺省的參數,如下例:

# linuxconf 的參數
/var/log/htmlaccess.log
{ errors jim
notifempty
nocompress
weekly
prerotate
/usr/bin/chattr -a /var/log/htmlaccess.log
endscript
postrotate
/usr/bin/chattr +a /var/log/htmlaccess.log
endscript
}
/var/log/netconf.log
{ nocompress
monthly
}

在這個例子中,當 /etc/logrotate.d/linuxconf 文件被讀入時,下麵的參數將覆蓋/etc/logrotate.conf中缺省的參數。

Notifempty
errors jim

五、為指定的文件配置轉儲參數
經常需要為指定文件配置參數,一個常見的例子就是每月轉儲/var/log/wtmp。為特定文件而使用的參數格式是:

# 注釋
/full/path/to/file
{
option(s)
}

下麵的例子就是每月轉儲 /var/log/wtmp 一次:
#Use logrotate to rotate wtmp
/var/log/wtmp
{
monthly
rotate 1
}


 

六、其他需要注意的問題

1、盡管花括號的開頭可以和其他文本放在同一行上,但是結尾的花括號必須單獨成行。

2、使用 prerotate 和 postrotate 選項
下麵的例子是典型的腳本 /etc/logrotate.d/syslog,這個腳本隻是對
/var/log/messages 有效。

/var/log/messages
{
prerotate
/usr/bin/chattr -a /var/log/messages
endscript
postrotate
/usr/bin/kill -HUP syslogd
/usr/bin/chattr +a /var/log/messages
endscript
}

第一行指定腳本對 /var/log messages 有效
花括號外的/var/log messages


 

 


 

prerotate 命令指定轉儲以前的動作/usr/bin/chattr -a 去掉/var/log/messages文件的“隻追加”屬性 endscript 結束 prerotate 部分的腳本postrotate 指定轉儲後的動作

/usr/bin/killall -HUP syslogd

用來重新初始化係統日誌守護程序 syslogd

/usr/bin/chattr +a /var/log/messages

重新為 /var/log/messages 文件指定“隻追加”屬性,這樣防治程序員或用戶覆蓋此文件。

最後的 endscript 用於結束 postrotate 部分的腳本

3、logrotate 的運行分為三步:

判斷係統的日誌文件,建立轉儲計劃以及參數,通過cron daemon 運行下麵的代碼是 Red Hat Linux 缺省的crontab 來每天運行logrotate。

#/etc/cron.daily/logrotate
#! /bin/sh

/usr/sbin/logrotate /etc/logrotate.conf

4、/var/log/messages 不能產生的原因:
這種情況很少見,但是如果你把/etc/services 中的 514/UDP 端口關掉的話,這個文件就不能產生了。

小結:本文通過對Red Hat 係統上典型的logrotate 配置例子的介紹,詳細說明了logrotate 程序的應用方法。希望對所有Linux 係統管理員有所幫助。管理好,分析好日誌文件是係統安全的第一步,在以後的文章裏FreeLAMP還會介紹另外一個檢查日誌的好東東 logcheck。




最後更新:2017-04-03 12:56:32

  上一篇:go 尼采:快樂的知識(下)
  下一篇:go java中byte數組與十六進製字符串相互轉換