Есть ли способ удалить первые N
строк из журнала, который активно добавляется приложением?
4 ответа
Я думаю, что эта задача может быть достигнута с помощью sed
sed -i '1,10d' myfile
бы удалить строки с 1 - го по 10 - й линии , образуют файл.
Я думаю, что все должны, по крайней мере, взглянуть на этот вкладыш sed 1.
Обратите внимание, что это не работает для файлов журналов, которые активно добавляются приложением (как указано в вопросе).
sed -i
создаст новый файл и «удалит» файл, в который выполняется запись. Большинство приложений будут продолжать записывать записи журнала в удаленный файл журнала и продолжать заполнять место на диске. Новый усеченный файл журнала добавляться не будет. Это прекратится только после перезапуска приложения или получения других сигналов о закрытии и повторном открытии файлов журнала. В этот момент в новом файле журнала будет пропасть (пропущенные записи журнала), если между использованием sed и перезапуском приложения произошла какая-либо запись в журнале.
Безопасный способ сделать это - остановить приложение, использовать sed для усечения журнала, а затем перезапустить приложение. Этот подход может быть неприемлемым для некоторых услуг (например, веб-сервер с высокой пропускной способностью и высокими требованиями к непрерывности обслуживания)
Нет, операционные системы, такие как Linux, и их файловые системы не предусматривают удаление данных из начала файла. Другими словами, начальная точка хранения для файла является фиксированной.
Удаление строк из начала файла обычно выполняется путем записи оставшихся данных в новый файл и удаления старых. Если в программе есть старый файл, открытый для записи, удаление этого файла откладывается до тех пор, пока приложение не закроет файл.
Как отметили комментаторы, по причинам, указанным в моем предыдущем предложении, вам обычно нужно согласовывать удаление файлов журнала с программами, которые пишут журналы. Как именно это сделать, зависит от программ. Некоторые программы закрывают и снова открывают свои файлы журналов, когда вы отправляете им сигнал (например, HUP), и это можно использовать для предотвращения записи записей журнала в «удаленный» файл журнала, не прерывая работу службы.
Для управления размером файлов журнала доступно множество утилит, например, logrotate.
Некоторые программы имеют свои собственные утилиты. Например, веб-сервер Apache включает утилиту rotatelogs .
Нет. Решением этой общей проблемы роста файла журнала является ротация журнала. Это включает в себя регулярное (как правило, еженедельное или еженедельное) перемещение существующего файла журнала к другому имени файла и начало с пустого файла журнала. Через некоторое время старые файлы журнала удаляются.
См .: http://www-uxsup.csx.cam.ac.uk/~jw35/courses/apache/html/x1670.htm.
Может быть, скопировать, усечь, привязать копию обратно к усечению size = 0 и удалить копию?
Лучше, но хвост, чтобы копировать хвост, обрезать оригинал, конкат копировать хвост на оригинал.
Вы получаете строки в журнале с длиной хвоста, так что лучше, чем ограничение длины в байтах.