Хорошо, это очень практичный вариант использования с моей точки зрения.
Допустим, у меня есть несколько простых оболочек, которые записывают вывод в файл. Это может быть что угодно, например, tcpdump. Есть ли общий и тривиальный способ убедиться, что выходной файл не будет превышать заданный размер?
Резонируя за этим, стоит защитить от заполнения всего доступного пространства в точке монтирования по ошибке. Если я забуду о сценарии или он будет выдавать ГБ данных в час, то эта простая задача отладки может привести к потенциальному сбою системы.
Теперь я знаю об опциях, встроенных в некоторые инструменты (например, сочетание -W / -C в tcpdump). Что мне нужно, это очень общий отказоустойчивый.
Короче говоря, когда я запускаю такой скрипт, как:
% this -is --my=very|awsome|script >> /var/tmp/output.log
Как убедиться, что output.log никогда не будет больше 1 ГБ.
Скрипт может рухнуть, быть убитым или чем-то еще
Решение, которое я ищу, должно быть легким и простым, с использованием только инструментов, доступных в популярных дистрибутивах, таких как ubuntu / debian / fedora. В общем, что-то широко доступное. Сложная, многострочная программа здесь не вариант, независимо от языка / технологии.
tail -c 1G
также работает, полезно посмотреть на хвост события. Понятно, что он сбрасывается после завершения команды.Установите максимальный размер файла для пользователя, который будет использоваться только для запуска этих сценариев.
Файл
/etc/security/limits
ограничивает пользователя значениями «по умолчанию», если только нет явных значений для конкретного пользователя. Эти пользовательские значения будут перезаписывать значения по умолчанию. Файл может иметь немного другое имя в зависимости от вашей ОС.Если ваш логин имеет имя log_maker, то добавьте эту строку в файл:
log_maker hard fsize 1000000
Число после fsize - это максимальный размер файла в килобайтах.
источник
curtail ограничивает размер вывода программы и сохраняет последние X КБ вывода с помощью следующей команды:
run_program | curtail -s 1G myprogram.log
https://github.com/Comcast/Infinite-File-Curtailer
ПРИМЕЧАНИЕ: я поддерживаю вышеупомянутый репо. Просто делюсь решением ...
источник
Вы можете ограничить любой файл с
Запись хвоста непосредственно в тот же файл делает пустой файл. Так что вам нужно использовать временный файл.
источник