Назад | Перейти на главную страницу

Постоянное отслеживание и сортировка нескольких файлов в Linux?

Есть ли способ использовать каналы или FIFO в комбинации для постоянного мониторинга нескольких файлов журнала (одного и того же формата) при сортировке по первому полю и затем иметь возможность эффективно выполнять tail -f для этого непрерывного отсортированного вывода?

Я могу делать такие вещи, как: -

mkfifo / tmp / файл журнала

хвост -F -q * .op> / tmp / logfile &

хвост -f </ tmp / logfile

но я попытался каким-то образом передать это через sort -k 1, но не могу заставить его работать.

Почему это не сработает?

tail -qf *.op | sort -k 1

я думаю multitail может сработать для вас, если только файлы журнала, о которых вы говорите, не огромны. Что-то вроде

multitail -R 5 -l "sort -k1 *.op"

выполнит sort -k1 *.op каждые пять секунд, что удобно при просмотре многостадийного вывода. Конечно, если хватит только X последних строк журнала, то tail -n somenumber *.op | sort -k1 сделал бы в командную часть.

Проблема здесь, вероятно, в том, что сортировка ожидает конца потока и не может начать, пока не достигнет его. Обычно sort используется для конечного набора данных, поэтому он ожидает их всех, а затем сортирует. Если бы он не ждал, ему пришлось бы продолжать прибегать к использованию по мере поступления новых данных, что на самом деле не вписывается в архитектуру конвейеров Unix.

Возможно, вы могли бы использовать tail -100l, чтобы взять последние 100 строк каждого журнала, отсортировать по времени - и отрезать столько строк, сколько вы можете отобразить, а затем отсортировать так, как вы хотите. Затем просто зацикливайтесь на регулярном обновлении.