Это что-то особенное, но держу пари, что вы можете мне помочь.

Я работаю в среде, где много лог-файлов генерируются и вращаются, в основном, из-за запуска java-сервисов. Поскольку мы выполняем L & P-тесты в этой среде, система часто генерирует больше файлов, чем хранится в результате логротации. Теперь мне нужен способ архивировать повернутые журналы перед их удалением, чтобы иметь возможность создавать все журналы, созданные во время теста.

Но у меня нет разрешения на изменение logrotation каким-либо образом, поэтому я должен сделать это с помощью bash и базовых инструментов UNIX. Кроме того, поскольку это тесты с нагрузкой и производительностью, для решения требуется совсем небольшой объем использования процессора и памяти.

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

Этот вопрос не обязательно о реальном коде, но о концепции - хотя пример кода очень приветствуется.

1 ответ1

1

Вы должны использовать inoticoming. Это в репозиториях для дистрибутивов семейства Debian. Если вы находитесь в другом дистрибутиве, вы можете скомпилировать его из исходного кода.

СИНТАКСИС

inoticoming [global-options] действия каталога *

ОПИСАНИЕ

Inoticoming - это демон, который наблюдает за каталогом с помощью inotify Framework Linux и запускает действия, когда туда помещаются файлы с конкретными именами.

Вы можете использовать его следующим образом:

   inotcoming --initialsearch /directory/with/log/files --regexp \
   last_log_rotate_file10.txt mv {} /directory/to/store/log_rotate_files/`date +"%T"` \;

Действие должно быть прекращено \; ;

опция --initialsearch выполняет следующее действие, как только запускается демон;

--regexp предшествует регулярному выражению, которому должно соответствовать имя файла, который вы хотите сохранить в другом месте; здесь я предположил, что вы знаете, что 10-й файл log_rotate_file является последним, который будет храниться вашей системой;

затем следует команда с {}, идентифицирующая имя файла, которому соответствует параметр --regexp , и я предположил, что вы захотите переместить файл в новый каталог с именем, отражающим время операции. Вы можете настроить это по своему желанию.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .