linux使用cron,logrotate來管理日誌文件

使用cron,logrotate來管理日誌文件

1) 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).

2) 缺省配置 logrotate
   logrotate 缺省的配置文件是 /etc/logrotate.conf
   
   Red Hat Linux 缺省安裝的文件內容是:

  1. # see "man logrotate" for details 
  2. # rotate log files weekly 
  3. weekly 
  4.  
  5. # keep 4 weeks worth of backlogs 
  6. rotate 4 
  7.  
  8. # send errors to root 
  9. errors root 
  10. # create new (empty) log files after rotating old ones 
  11. create 
  12.  
  13. # uncomment this if you want your log files compressed 
  14. #compress 
  15. # RPM packages drop log rotation information into this directory 
  16. include /etc/logrotate.d 
  17.  
  18. # no packages own lastlog or wtmp --we'll rotate them here 
  19. /var/log/wtmp { 
  20. monthly 
  21. create 0664 root utmp 
  22. rotate 1 
  23.  
  24. /var/log/lastlog { 
  25. monthly 
  26. rotate 1 
  27.  
  28. # system-specific logs may be configured here 


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

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

3) 使用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 文件就可以了。

4) 使用include 選項覆蓋缺省配置
   當 /etc/logrotate.conf 讀入文件時,include 指定的文件中的轉儲參數將覆蓋缺省的參數,如下例:

  1. # linuxconf 的參數 
  2.   /var/log/htmlaccess.log 
  3.   { 
  4.   errors jim 
  5.   notifempty 
  6.   nocompress 
  7.   weekly 
  8.   prerotate 
  9.     /usr/bin/chattr -a /var/log/htmlaccess.log 
  10.   endscript 
  11.   postrotate 
  12.     /usr/bin/chattr +a /var/log/htmlaccess.log 
  13.   endscript 
  14.   } 
  15.   /var/log/netconf.log 
  16.   { 
  17.   nocompress 
  18.   monthly 
  19.   } 

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

   Notifempty
   errors jim

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

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

   下面的例子就是每月轉儲 /var/log/wtmp 一次:

  1. #Use logrotate to rotate wtmp 
  2. /var/log/wtmp 
  3. monthly 
  4. rotate 1 

6) 其他需要注意的問題
   a. 儘管花括號的開頭可以和其他文本放在同一行上,但是結尾的花括號必須單獨成行。

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

  1. /var/log/messages 
  2. {  
  3. prerotate 
  4.   /usr/bin/chattr -a /var/log/messages 
  5. endscript 
  6. postrotate 
  7.   /usr/bin/kill -HUP syslogd 
  8.   /usr/bin/chattr +a /var/log/messages 
  9. endscript 

   第一行指定腳本對 /var/log messages 有效
   prerotate 命令指定轉儲以前的動作
     /usr/bin/chattr -a 去掉/var/log/messages文件的“只追加”屬性
   endscript 結束
   postrotate 指定轉儲後的動作
     /usr/bin/killall -HUP syslogd 用來重新初始化系統日誌守護程序 syslogd
     /usr/bin/chattr +a /var/log/messages 重新爲 /var/log/messages 文件指定“只追加”屬性,這樣防治程序員或用戶覆蓋此文件。
   最後的 endscript 用於結束 postrotate 部分的腳本

   c. logrotate 的運行分爲三步:
   判斷系統的日誌文件,建立轉儲計劃以及參數,通過cron daemon 運行下面的代碼是 Red Hat Linux 缺省的crontab 來每天運行logrotate。

  1. #/etc/cron.daily/logrotate 
  2. #! /bin/sh 
  3.  
  4. /usr/sbin/logrotate /etc/logrotate.conf 

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

7) cron
   cron 是一個可以用來根據時間、日期、月份、星期的組合來調度對重複任務的執行的守護進程。

   cron 假定系統持續運行。如果當某任務被調度時系統不在運行,該任務就不會被執行。
   要使用 cron 服務,你必須安裝了 vixie-cron RPM 軟件包,而且必須在運行 crond 服務。要判定該軟件包是否已安裝,使用 rpm -q vixie-cron 命令。要判定該服務是否在運行,使用 /sbin/service crond status 命令。

   a. 配置 cron 任務
   cron 的主配置文件是 /etc/crontab,它包括下面幾行:

  1. SHELL=/bin/bash 
  2. PATH=/sbin:/bin:/usr/sbin:/usr/bin 
  3. MAILTO=root 
  4. HOME=/ 
  5.  
  6. # run-parts 
  7. 01 * * * * root run-parts /etc/cron.hourly 
  8. 02 4 * * * root run-parts /etc/cron.daily 
  9. 22 4 * * 0 root run-parts /etc/cron.weekly 
  10. 42 4 1 * * root run-parts /etc/cron.monthly  

   前四行是用來配置 cron 任務運行環境的變量。SHELL 變量的值告訴系統要使用哪個 shell 環境(在這個例子裏是 bash shell);PATH 變量定義用來執行命令的路徑。cron 任務的輸出被郵寄給 MAILTO 變量定義的用戶名。如果 MAILTO 變量被定義爲空白字符串(MAILTO=""),電子郵件就不會被寄出。HOME 變量可以用來設置在執行命令或腳本時使用的主目錄。

   /etc/crontab 文件中的每一行都代表一項任務,它的格式是:
   minute   hour   day   month   dayofweek   command

   minute — 分鐘,從 0 到 59 之間的任何整數
   hour — 小時,從 0 到 23 之間的任何整數
   day — 日期,從 1 到 31 之間的任何整數(如果指定了月份,必須是該月份的有效日期)
   month — 月份,從 1 到 12 之間的任何整數(或使用月份的英文簡寫如 jan、feb 等等)
   dayofweek — 星期,從 0 到 7 之間的任何整數,這裏的 0 或 7 代表星期日(或使用星期的英文簡寫如 sun、mon 等等)
   command — 要執行的命令(命令可以是 ls /proc >> /tmp/proc 之類的命令,也可以是執行你自行編寫的腳本的命令。)

   在以上任何值中,星號(*)可以用來代表所有有效的值。譬如,月份值中的星號意味着在滿足其它制約條件後每月都執行該命令。
   整數間的短線(-)指定一個整數範圍。譬如,1-4 意味着整數 1、2、3、4。
   用逗號(,)隔開的一系列值指定一個列表。譬如,3, 4, 6, 8 標明這四個指定的整數。
   正斜線(/)可以用來指定間隔頻率。在範圍後加上 /<integer> 意味着在範圍內可以跳過 integer。譬如,0-59/2 可以用來在分鐘字段定義每兩分鐘。間隔頻率值還可以和星號一起使用。例如,*/3 的值可以用在月份字段中表示每三個月運行一次任務。
   開頭爲井號(#)的行是註釋,不會被處理。

   如你在 /etc/crontab 文件中所見,它使用 run-parts 腳本來執行 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 目錄中的腳本,這些腳本被相應地每小時、每日、每週、或每月執行。這些目錄中的文件應該是 shell 腳本。

   如果某 cron 任務需要根據調度來執行,而不是每小時、每日、每週、或每月地執行,它可以被添加到 /etc/cron.d 目錄中。該目錄中的所有文件使用和 /etc/crontab 中一樣的語法。範例請參見下例。

  1. # record the memory usage of the system every monday  
  2. # at 3:30AM in the file /tmp/meminfo 
  3. 30 3 * * mon cat /proc/meminfo >> /tmp/meminfo 
  4. # run custom script the first day of every month at 4:10AM 
  5. 10 4 1 * * /root/scripts/backup.sh  

   根用戶以外的用戶可以使用 crontab 工具來配置 cron 任務。所有用戶定義的 crontab 都被保存在 /var/spool/cron 目錄中,並使用創建它們的用戶身份來執行。要以某用戶身份創建一個 crontab 項目,登錄爲該用戶,然後鍵入 crontab -e 命令,使用由 VISUAL 或 EDITOR 環境變量指定的編輯器來編輯該用戶的 crontab。該文件使用的格式和 /etc/crontab 相同。當對 crontab 所做的改變被保存後,該 crontab 文件就會根據該用戶名被保存,並寫入文件 /var/spool/cron/username 中。

   cron 守護進程每分鐘都檢查 /etc/crontab 文件、etc/cron.d/ 目錄、以及 /var/spool/cron 目錄中的改變。如果發現了改變,它們就會被載入內存。這樣,當某個 crontab 文件改變後就不必重新啓動守護進程了。

   b. 控制對 cron 的使用
   /etc/cron.allow 和 /etc/cron.deny 文件被用來限制對 cron 的使用。這兩個使用控制文件的格式都是每行一個用戶。兩個文件都不允許空格。如果使用控制文件被修改了,cron 守護進程(crond)不必被重啓。使用控制文件在每次用戶添加或刪除一項 cron 任務時都會被讀取。

   無論使用控制文件中的規定如何,根用戶都總是可以使用 cron。
   如果 cron.allow 文件存在,只有其中列出的用戶才被允許使用 cron,並且 cron.deny 文件會被忽略。
   如果 cron.allow 文件不存在,所有在 cron.deny 中列出的用戶都被禁止使用 cron。

   c. 啓動和停止服務
   要啓動 cron 服務,使用 /sbin/service crond start 命令。要停止該服務,使用 /sbin/service crond stop 命令。推薦你在引導時啓動該服務。

 

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