Bash
在 shell 腳本級別限製文件大小(stdout)的簡單方法?
好的,從我的角度來看,這是一個非常實用的案例。
假設我有一個簡單的 shell oneliner,它確實將輸出記錄到文件中。這可以是任何東西,例如 tcpdump。是否有任何通用和簡單的方法來確保輸出文件不會超過給定的大小?
這背後的共鳴是為了防止錯誤地填充安裝點上的整個可用空間。如果我忘記了腳本,或者它每小時會產生 GB 的數據,那麼這個簡單的調試任務可能會導致潛在的系統崩潰。
現在,我知道某些工具中內置的選項(例如 tcpdump 中的 -W/-C 組合)。我需要的是一個非常通用的故障保護。
長話短說 - 當我執行如下腳本時:
% this -is --my=very|awsome|script >> /var/tmp/output.log
如何確保 output.log 永遠不會超過 1GB。
腳本可能會崩潰、被殺死或其他任何情況。
我正在尋找的解決方案應該簡單易行,只使用流行發行版(如 ubuntu/debian/fedora)中可用的工具。一般來說,一些廣泛可用的東西。無論語言/技術如何,複雜的多行程序都不是這裡的選擇。
您可以
head
為此使用:command | head -c 1G > /var/tmp/output.log
它接受 K、M、G 等作為後綴(預設為字節)。附加“B”以使用 base 10 版本。
為僅用於執行這些腳本的使用者設置最大文件大小。
該文件
/etc/security/limits
使用“預設”值限制使用者,除非特定使用者有明確的值。這些使用者特定的值將覆蓋預設值。根據您的作業系統,該文件的名稱可能略有不同。如果您的日誌使用者名為 log_maker,則將此行添加到文件中:
log_maker hard fsize 1000000
fsize 後面的數字是以 KB 為單位的最大文件大小。