Bash

在 shell 腳本級別限製文件大小(stdout)的簡單方法?

  • December 27, 2021

好的,從我的角度來看,這是一個非常實用的案例。

假設我有一個簡單的 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 為單位的最大文件大小。

引用自:https://serverfault.com/questions/277948