我的新書AI 職場超神助手:ChatGPT 與生成式 AI 一鍵搞定工作難題的教材投影片已製作完成
歡迎各位有需要的教師和博碩文化索取教材

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範例

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 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

參考資料


17年資歷女工程師,專精於動畫、影像辨識以及即時串流程式開發。經常組織活動,邀請優秀的女性分享她們的技術專長,並在眾多場合分享自己的技術知識,也活躍於非營利組織,辦理活動來支持特殊兒及其家庭。期待用技術改變世界。

如果你認同我或想支持我的努力,歡迎請我喝一杯咖啡!讓我更有動力分享知識!

Buy Me A Coffee