Posted on

Linux下大檔案的log分割處理

使用指令分割大檔案

按檔案大小分割
[root@localhost]$ split -C 100M large_file.txt stxt
按行數分割
[root@localhost]$ split -l 1000 large_file.txt stxt
二進位檔案分割(以-b引數來指定分割後的檔案大小)
[root@localhost]$ split -b 100M data.bak sdata

固定時間切割LOG檔案

logrotate官方說明: https://linux.die.net/man/5/logrotate.conf

logrotate旨在簡化對生成大量日誌文件的系統的管理。它允許自動旋轉,壓縮,刪除和郵寄日誌文件。每個日誌文件可以每天,每週,每月或當文件太大時進行處理。

通常,logrotate作為日常cron作業運行。除非該日誌的標準基於日誌的大小並且每天要多次運行logrotate,或者除非使用了-f或–force選項,否則它不會在一天內多次修改日誌。

命令行上可以提供任意數量的配置文件。較新的配置文件可能會覆蓋較早的文件中提供的選項,因此列出logrotate配置文件的順序 很重要。通常,應使用包含所需其他任何配置文件的單個配置文件。有關如何使用include指令完成此操作的更多信息,請參見下文。如果在命令行上給出了目錄,則該目錄中的每個文件都將用作配置文件。

如果未提供命令行參數,logrotate將打印版本和版權信息以及簡短的使用摘要。如果輪換日誌時發生任何錯誤,logrotate將以非零狀態退出。

logrotate的Options

  • -d,--debug: 打開調試模式並暗含-v。在調試模式下,將不會對日誌或logrotate狀態文件進行任何更改。
  • -f,--force: 告訴logrotate強制rotate,即使它認為沒有必要也是如此。有時,在將新條目添加到logrotate配置文件後,或者如果手動刪除了舊日誌文件,這將很有用 ,因為將創建新文件,並且日誌記錄將繼續正確進行。
  • -m, --mail <command>: 告訴logrotate郵寄日誌時使用哪個命令。此命令應接受兩個參數:1)郵件的主題,以及2)收件人。然後,該命令必須閱讀標準輸入上的消息並將其郵寄給收件人。預設的mail命令是/bin/mail -s
  • -s, --state : 告訴logrotate使用備用狀態文件。如果logrotate以不同的用戶身份運行各種日誌文件集,這將很有用。預設狀態文件是/var/lib/logrotate.status
  • --usage: 打印簡短的使用信息。
  • --?, --help: -打印幫助消息。
  • -v, --verbose: 打開詳細模式。

logrotate.conf範例

# sample logrotate configuration file
compress

/var/log/messages {
    rotate 5
    weekly
    postrotate
        /usr/bin/killall -HUP syslogd
    endscript
}

"/var/log/httpd/access.log" /var/log/httpd/error.log {
    rotate 5
    mail www@my.org
    size 100k
    sharedscripts
    postrotate
        /usr/bin/killall -HUP httpd
    endscript
}

/var/log/news/* {
    monthly
    rotate 2
    olddir /var/log/news/old
    missingok
    postrotate
        kill -HUP 'cat /var/run/inn.pid'
    endscript
    nocompress
}

常用參數

  • copytruncate: 會先複製一個log檔然後再將原本的log檔案清空,可用在無法通知使用此Log檔案停止寫進log的狀態
  • compress: 是否要壓縮分割後的log
  • daily, monthly, weekly, yearly: 多久分割一次
  • missingok: 沒有此檔案也不跳錯誤

相關檔案

  • /etc/logrotate.conf: Configuration options.
  • /var/lib/logrotate.status: Default state file.
  • /etc/cron.daily/logrotate: 每天執行(如要改成每小時執行可以將logrotate移到cron.hourly)

logrotate 卻是在規定的時間到了之後才來進行登錄檔的輪替, 所以這個 logrotate 程序當然就是掛在 cron 底下進行的

立刻執行logrotate

logrotate -v /etc/logrotate.conf

參考資料