Вопрос: Легкий способ ограничить размер файла (stdout) на уровне сценария оболочки?


Хорошо, это очень практичный случай использования с моей точки зрения.

Скажем, у меня есть простая оболочка oneliner, которая записывает вывод в файл. Это может быть просто что угодно, например tcpdump. Есть ли общий и тривиальный способ, чтобы убедиться, что выходной файл не будет превышать заданный размер?

Резолюция позади этого заключается в том, чтобы защитить от заполнения всего доступного места в точке монтирования по ошибке. Если я забуду о сценарии, или он даст данные в секунду в час, то эта простая задача отладки может привести к потенциальному сбою системы.

Теперь, я знаю, что варианты встроены в некоторые из инструментов (например, комбинация -W / -C в tcpdump). То, что мне нужно, является очень общим отказоустойчивым.

Короче говоря, когда я запускаю скрипт вроде:

% this -is --my=very|awsome|script >> /var/tmp/output.log

Как убедиться, что output.log никогда не будет больше 1 ГБ.

Скрипт может быть разбит, убит или что угодно.

Решение, которое я ищу, должно быть простым и простым, используя только инструменты, доступные в популярных дистрибутивах, таких как ubuntu / debian / fedora. В общем, что-то широко доступное. Сложная, многострочная программа не является вариантом здесь, независимо от языка / технологии.


7
2018-06-07 18:13


Источник




Ответы:


Вы можете использовать head для этого:

command | head -c 1G > /var/tmp/output.log

Он принимает K, M, G и т. Д. Как суффиксы (байты по умолчанию). Добавьте «B», чтобы использовать базовые версии 10.


10
2018-06-07 18:23



голова снова на стене Это не могло быть проще. Благодаря! - mdrozdziel
Кажется tail -c 1G также работает, полезно посмотреть на хвост события. Понятно, что он сбрасывается после окончания команды. - dashesy


Установите максимальный размер файла для пользователя, который будет использоваться только для запуска этих сценариев.

Файл /etc/security/limits ограничивает пользователя значениями «по умолчанию», если нет явных значений для конкретного пользователя. Эти пользовательские значения будут перезаписывать значения по умолчанию. В зависимости от вашей операционной системы файл может иметь несколько другое имя.

Если ваш пользователь журнала имеет имя log_maker, добавьте эту строку в файл:

log_maker hard fsize 1000000

Число после fsize - это максимальный размер файла в КБ.


0
2018-06-07 18:31