Постоянное отслеживание и сортировка нескольких файлов в Linux?
Есть ли способ использовать каналы или FIFO в комбинации для постоянного мониторинга нескольких (одинакового формата) файлов журналов при сортировке по первому полю, а затем с возможностью эффективно выполнять tail -f на этом непрерывном, отсортированном выводе?
Я могу делать такие вещи, как: -
mkfifo / tmp / logfile
tail -F -q *.op> / tmp / logfile &
tail -f tmp / logfile
но я пробовал передать это как-то через сортировку -k 1, но не могу заставить его работать.
2 ответа
Почему бы это не сработало?
tail -qf *.op | sort -k 1
Похоже multitail
может работать для вас, если только файлы журнала, о которых вы говорите, не очень большие. Что-то вроде
multitail -R 5 -l "sort -k1 *.op"
выполнит sort -k1 *.op
Команда каждые пять секунд и положите его в выходной вид мультитейла. Конечно, если достаточно только X последних строк из журнала, то tail -n somenumber *.op | sort -k1
будет делать в командной части.
Проблема здесь, вероятно, в том, что сортировка ожидает конца потока и не может начаться, пока не достигнет его. Обычно сортировка используется для конечного набора данных, поэтому она ожидает всех данных, а затем сортирует. Если бы он не ждал, ему пришлось бы продолжать прибегать к новым данным, которые не вписывались в архитектуру Unix Pipe.
Возможно, что вы могли бы сделать, это использовать tail -100l, чтобы взять последние 100 строк каждого журнала, отсортировать по времени - и отрезать столько строк, сколько вы можете отобразить, а затем отсортировать по своему усмотрению. Тогда просто цикл, чтобы регулярно обновлять.