обрабатывать большое количество журналов с помощью cron или logrotate

У нас есть приложение, развернутое на сервере, которое в некоторых сценариях генерирует некоторые журналы в следующем формате.

process_name.hostname.common_text.log.{error/info/warning}.date.time 

Теперь из-за этого формата нет ни одного журнала, но несколько таких журналов с одним и тем же именем process_name.hostname.common_text. {Error / info / warning} , но с остальными частями, отличающимися друг от друга, из-за различий в дате и время. Но что касается логротата, он рассматривает все это как отдельные журналы, и он сохранит одну такую ​​копию каждого журнала, если я скажу

вращать 1

в logrotate conf.

Но, насколько мне известно, это все те же журналы, и я не хочу сохранять журнал, кроме последнего 1 журнала из каждой категории ( ошибка / информация / предупреждение ). Как я могу это сделать?

Я думал написать сценарий, который будет работать еженедельно в cron. И этот скрипт будет проверять последний файл из каждой категории ( error / info / warning ) с использованием timestamp ( ls -ltr ), а затем удалять остальную часть таких журналов. Но, опять же, это становится слишком сложным, если я пытаюсь поместить его в скрипт.

Я ищу что-то вроде этого.

 ls -ltr |grep process_name.hostname.common_text.log.error |head -n -1 ls -ltr |grep process_name.hostname.common_text.log.info |head -n -1 ls -ltr |grep process_name.hostname.common_text.log.warning |head -n -1 

Вышеуказанные 3 команды вернут имена всех журналов process_name.hostname.common_text.log. {Error / info / warning} .date.time, за исключением недавнего.

1) Можно ли передать вывод каждой из приведенных выше команд в exec или xargs в одной строке, чтобы я мог запустить rm -rf против него?

2) Каков лучший способ сделать это? coz, имя процесса снова имеет 2 разных имени, поэтому мне нужно будет запустить 6 команд или, может быть, больше.

3) Вместо grepping трижды, один раз для ошибки и один раз для информации, и один раз для предупреждения, есть ли способ, которым я могу grep для всех 3 в одной строке?

  • Вывод Shell Script не записывается в файл должным образом
  • Сценарий оболочки для проверки состояния точки монтирования на сервере linux
  • Как создать несколько почтовых индексов из каталога, содержащего миллион XML-файлов?
  • Замените строку в текстовом файле, используя сценарий оболочки, который не работает должным образом
  • Переименование файлов рекурсивно в sh
  • По умолчанию fedora 15 install, как вы можете подключиться к сетевому диску после входа в систему?
  • Как создать относительную символическую ссылку, совместимую с POSIX, в / bin / sh?
  • Функция вывода Bash Output / dev / null
  • One Solution collect form web for “обрабатывать большое количество журналов с помощью cron или logrotate”

    Если вы используете -1 вместо -l для ls, вы получаете только имена файлов и можете передавать их напрямую в rm. Я бы использовал что-то вроде этого:

     rm $(ls -1tr process_name.hostname.common_text.log.error* | head -n -1) \ $(ls -1tr process_name.hostname.common_text.log.info* | head -n -1) \ $(ls -1tr process_name.hostname.common_text.log.warning* | head -n -1) 
    Linux и Unix - лучшая ОС в мире.