23

Есть ли способ удалить первые N строк из журнала, который активно добавляется приложением?

4 ответа4

27

Я думаю, что эта задача может быть достигнута с помощью sed

sed -i '1,10d' myfile

бы удалить строки с 1 - го по 10 - й линии , образуют файл.

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

Обратите внимание, что это не работает для файлов журналов, которые активно добавляются приложением (как указано в вопросе).

sed -i создаст новый файл и «удалит» файл, в который выполняется запись. Большинство приложений будут продолжать записывать записи журнала в удаленный файл журнала и продолжать заполнять место на диске. Новый усеченный файл журнала добавляться не будет. Это прекратится только после перезапуска приложения или получения других сигналов о закрытии и повторном открытии файлов журнала. В этот момент в новом файле журнала будет пропасть (пропущенные записи журнала), если между использованием sed и перезапуском приложения произошла какая-либо запись в журнале.

Безопасный способ сделать это - остановить приложение, использовать sed для усечения журнала, а затем перезапустить приложение. Этот подход может быть неприемлемым для некоторых услуг (например, веб-сервер с высокой пропускной способностью и высокими требованиями к непрерывности обслуживания)

9

Нет, операционные системы, такие как Linux, и их файловые системы не предусматривают удаление данных из начала файла. Другими словами, начальная точка хранения для файла является фиксированной.

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


Как отметили комментаторы, по причинам, указанным в моем предыдущем предложении, вам обычно нужно согласовывать удаление файлов журнала с программами, которые пишут журналы. Как именно это сделать, зависит от программ. Некоторые программы закрывают и снова открывают свои файлы журналов, когда вы отправляете им сигнал (например, HUP), и это можно использовать для предотвращения записи записей журнала в «удаленный» файл журнала, не прерывая работу службы.

Для управления размером файлов журнала доступно множество утилит, например, logrotate.

Некоторые программы имеют свои собственные утилиты. Например, веб-сервер Apache включает утилиту rotatelogs .

6

Нет. Решением этой общей проблемы роста файла журнала является ротация журнала. Это включает в себя регулярное (как правило, еженедельное или еженедельное) перемещение существующего файла журнала к другому имени файла и начало с пустого файла журнала. Через некоторое время старые файлы журнала удаляются.

См .: http://www-uxsup.csx.cam.ac.uk/~jw35/courses/apache/html/x1670.htm.

0

Может быть, скопировать, усечь, привязать копию обратно к усечению size = 0 и удалить копию?

Лучше, но хвост, чтобы копировать хвост, обрезать оригинал, конкат копировать хвост на оригинал.

Вы получаете строки в журнале с длиной хвоста, так что лучше, чем ограничение длины в байтах.

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