Перемещать только содержимое файла, а не какой-либо обработчик/указатель файла

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

У меня есть все права доступа к файлу журнала. Что я хочу сделать, так это переместить только содержимое файла до этого момента (взять содержимое файла и очистить файл), не нарушая другой процесс. Желательно через python скрипт.

[EDIT] (т.е.). Мне нужно вырезать и вставить все содержимое из файла журнала (основного) до этого момента и поместить их в другой (вторичный) файл журнала. Я буду использовать этот вторичный файл журнала для анализа данных. В то же время, если долго работающий процесс записывает что-либо в основной файл журнала, это не должно быть потеряно. Это не будет проблемой, если я перенесу новые данные во вторичный файл журнала вместе с другим содержимым.

[EDIT 2] Основная проблема, с которой я сталкиваюсь, заключается в том, чтобы очистить содержимое файла после его извлечения из основного файла журнала. Мне нужно убедиться, что любой журнал, записанный в файл, не будет потерян, пока я читаю из основного журнала и записываю их во дополнительный журнал и удаляю это содержимое из файла.

Я просмотрел TimedRotatingFileHandler, но это мне не помогает. Любые другие предложения?

Спасибо


person thiruvenkadam    schedule 12.09.2013    source источник
comment
Можно поподробнее про второй абзац.   -  person Vivek    schedule 12.09.2013
comment
Я сделал обновление, чтобы объяснить лучше :-) Есть еще пояснения?   -  person thiruvenkadam    schedule 12.09.2013
comment
Почему бы вам не передать вывод одного файла журнала в другой файл журнала. Это простая команда Linux. Затем используйте этот второй лог-файл для дальнейшей обработки.   -  person Vivek    schedule 12.09.2013
comment
Вы имеете в виду взять содержимое лог-файла? В этом случае я должен очистить содержимое, извлеченное из основного файла, чтобы в будущем его не было для анализа данных. Можно ли это сделать с помощью сценария оболочки?   -  person thiruvenkadam    schedule 13.09.2013


Ответы (1)


Способ Linux для сохранения файла прост. Используйте эту команду в своем файле журнала, как только начнется процесс регистрации:

  tail -f log_file_name.log >> /tmp/new_file_name.log &


[EDIT] tail -f log_file_name.log >> /tmp/new_file_name.log | tail -f /tmp/new_file_name.log | xargs -I TailOutput echo sed -i '/TailOutput/d' log_file_name.log

Затем вы можете использовать этот файл new_file_name.log, чтобы делать с этим новым файлом все, что хотите. Также ваш исходный файл журнала не поврежден. Я понимаю, что это становится немного искаженным, но теперь я могу так думать!!!

person Vivek    schedule 13.09.2013
comment
Но это не удаляет данные из моего основного файла журнала. Это больше похоже на использование '''cat log_file_name.log › /tmp/new_file_name.log'''. Мне нужно что-то вроде '''cat log_file_name.log › /tmp/new_file_name.log && cat /dev/null › log_file_name.log''', за исключением того, что журналы, записанные после первой команды cat, не теряются. - person thiruvenkadam; 13.09.2013
comment
Несмотря на то, что это кажется извращенным, у меня это работает :-) И это главное :-) - person thiruvenkadam; 16.09.2013