Как создать файл журнала, который "pop_front" с? - PullRequest
0 голосов
/ 05 мая 2011

Предположим, у меня есть консольная программа, которая выводит строки отладки трассировки на стандартный вывод, который я хочу запустить на сервере.

А потом я делаю:

./serverapp > someoutputfile

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

tail -f someoutputfile

Однако, по понятным причинам, со временем someoutputfile станет довольно большим.

Есть ли способ сделать так, чтобы someoutputfile ограничивался определенным размером и только самыми последними его частями?

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

Ответы [ 2 ]

1 голос
/ 05 мая 2011

Вы можете усечь файл журнала. Один из способов сделать это - набрать:

>someoutputfile

в командной строке оболочки. Это редирект без вывода, и он сотрет все содержимое файла.

Хитрость в том, что любая программа, записывающая в этот файл, продолжит запись в файл в его последней позиции вывода. Таким образом, файл сразу получит «дыру» от 0 до X байт, где X - выходная позиция.

В большинстве файловых систем Linux эти дыры приводят к разреженным файлам, которые фактически не используют пространство в дыре. Таким образом, файл может содержать много гигабайт нулей в начале, но использовать только 500 КБ на диске.

Другой способ сделать быструю запись в журнал - сопоставить файл памяти на диске фиксированного размера: например, 16 МБ. Затем протоколирование записывает в указатель памяти, который оборачивается, когда достигает предела размера. Затем он продолжает писать в начале файла. Это хорошая идея иметь какой-то маркер позиции записи. Я использую <====>, например. Я считаю этот метод невероятно быстрым и отлично подходит для ведения журнала отладки.

0 голосов
/ 05 мая 2011

Я не использовал его, но он получает хорошие отзывы здесь на SO, попробуйте logrotate

Более общее обсуждение управления выходными файлами может показать, что о нестандартном сценарии / решении не может быть и речи ;-): Проблема с перенаправлением вывода Bash

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...