Существует ли команда типа "tee", которая ограничивает размер файла и рассматривает выходной файл как очередь фиксированного размера?

Системный вызов rmdir завершается с ошибкой EINVAL, если последний компонент пути аргумента ".".". Это документировано на http://pubs.opengroup.org/onlinepubs/009695399/functions/rmdir.html , и обоснование такого поведения таково:

Смысл удаления имени пути /dot неясен, поскольку имя файла (каталога) в родительском каталоге, который должен быть удален, не является ясно, особенно при наличии нескольких ссылок на каталог.

2
27.01.2017, 19:13
2 ответа

Именно так, скорее всего нет. Как только он разогреется и заполнит файл, он будет переписывать 1MiB-N байт старых данных, чтобы перетасовать их по файлу, на каждый N байт новых данных, которые он добавляет в конец буфера. Это не совсем идеальный механизм, к тому же чтение файла по мере его записи чревато проблемами "разрыва".

Близко к этому существует множество команд. Увеличьте количество файлов до двух, текущий файл и его непосредственный предшественник, чтобы в любой момент времени иметь от 1 до 2 Мбайт самого последнего вывода, причем вывод не копируется после записи; и вы получите то, что целая куча программ протоколирования семейства daemontools делает по своему замыслу. По сути, они представляют собой именно этот тип "tee plus".

  • С помощью multilog Дэна Бернштейна из daemontools и multilog Брюса Гюнтера из daemontools-encore:
    someprogram | multilog n2 s1048576 ./logdir/
  • С s6-log Лорана Берко из s6:
    someprogram | s6-log n2 s1048576 ./logdir/
  • Gerrit Pape's svlogd из runit с конфигурационным файлом, который говорит n2 s1048576:
    someprogram | svlogd ./logdir/
  • Wayne Marshall's tinylog from perp:
    someprogram | tinylog -k 1 -s 1048576 ./logdir/
  • С моим cyclog from nosh:
    someprogram | cyclog --max-file-size 1048576 --max-total-size 1048576 ./logdir/

Further reading

1
27.01.2020, 22:10

В пакете apache2-utilsприсутствует утилита под названием rotatelogs, она полностью соответствует вашим требованиям.

Краткий обзор:

rotatelogs [ -l ] [ -L имя ссылки ] [ -p программа ] [ -f ] [ -t ] [ -v ] [ -e ] [ -c ] [ -n количество файлов] файл журнала время вращения|размер файла(B|K|M|G) [ смещение ]

Полный мануал вы можете прочитать по этой ссылке.

1
27.01.2020, 22:10

Теги

Похожие вопросы