LINUX.ORG.RU

Скрипт BASH

 


0

2

Здравствуйте! Начал учить Bash Нужно написать скрипт который будет архивировать файл логов и стирать с файла текст старше 7 дней. Не могу понять вообще с какой стороны тут подойти

Здравствуйте!

Вам, наверно, надо это к сессии выучить, да? Тогда читайте про уже упомянутый logrotate, для архивирования отлично подойдет gzip, а найти файлы старше N дней и выполнить действия с ними поможет find с ключем mtime.

alozovskoy ★★★★★ ()
Ответ на: комментарий от alozovskoy

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

Мне нужно написать скрипт который будет архивировать любой файл (например файл логов, потому что там указано дата и время) и потом чтобы этот скрипт удалял из файла текст 7-днейвной и старше давности!

zhenmil ()
Ответ на: комментарий от zhenmil

Вешай inotifywait над файлом, в нём пихай новые строчки в redis с ex 604800, архивируй выхлоп keys.

aedeph_ ★★ ()
Последнее исправление: aedeph_ (всего исправлений: 1)

Архивируйте логи раз в неделю. Пошла вторая неделя - предыдущие логи удаляются.

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

lexazloy ()
Ответ на: комментарий от zhenmil

Эту конкретную задачу? Не исключено, но вряд ли сильно заметно.

aedeph_ ★★ ()
Последнее исправление: aedeph_ (всего исправлений: 1)

Зачем это нужно ?
Чем не устраивает logrotate ?

bdfy ★★★★ ()
Ответ на: комментарий от bdfy

Я не говорил что он не устраивает, просто я только начал учить Bash и у меня задание написать вот такой скрипт. как я себе его представлял: создать переменную DATE и ей присвоить значение сегодняшней даты, затем grep-ом наити в файле строки с DATE-7дней и удалить их. Но как это сделать понять не могу

zhenmil ()
Ответ на: комментарий от zhenmil

Если вы архивируете файл вы туда писать уже ничего не сможете. Сначала манипуляции с файлом, потом архивирование.

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

alozovskoy ★★★★★ ()
Ответ на: комментарий от alozovskoy

Удалять текст старше 7 дней получится только парсингом этого файла.

Нет, не получится.

aedeph_ ★★ ()
Ответ на: комментарий от zhenmil

wo wo !
ты так ничего не изучишь.
получая готовые ответы не получаешь знаний.

bdfy ★★★★ ()
Ответ на: комментарий от bdfy

Та я то это понимаю. Но вот читаю я man по этому логротейту и всеравно немогу понять как єто сделать.

zhenmil ()
Ответ на: комментарий от zhenmil

та нет не к сессии)))
у меня задание написать вот такой скрипт

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

conformist ★★★ ()
Ответ на: комментарий от zhenmil

Прочитал, но что-то всеравно не доходит.

Букварь читай.

anonymous ()

Задаешь дату, преобразуешь её в секунды после 01-01-1970, date -d "you_date" +%s, читаешь строку из файла, выделяешь дату logdate=$(echo $line | cut -f 1) преобразуешь дату в секунды, если она больше заданной выплёвываешь строку, если нет - идешь дальше.

crutch_master ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.