системный журнал монитора и строка печати без 'шаблона'

Я хотел бы контролировать мой /var/log/syslog непрерывно. Однако при контроле, я хотел бы избежать определенного шаблона (шаблонов) при контроле. Я интересуюсь только последними 15 (например), строки.

Для обычного контроля я использую команду:

watch -n 1 tail -n 15 /var/log/syslog

Принимая во внимание, что, то, что я на самом деле хотел бы иметь, является чем-то как:

watch -n 1 tail -n 15 /var/log/syslog | grep -v -E 'pattern1|pattern2'

Будучи более конкретным с моим требованием:

Я хотел бы непрерывно контролировать записи в syslog, предотвращение определенного шаблона (шаблонов). Экран должен быть обновлен каждый установленный срок (скажите 1 с или 2 с).

Следующее является более (неудавшимися) попытками:

watch cat /var/log/syslog | grep -v -E 'pattern1|pattern2'

(Частично) успешная попытка:

while true;
do 
  clear;
  cat /var/log/syslog | grep -v -E 'pattern1|pattern2' | tail -15;
  sleep 1;
  echo '\"CTRL-C\" to close';
done

Однако гладкость watch потерян здесь.

Сводка

Таким образом, вопрос, там любой способ объединиться watch, tail и grep?

Я использую bash 4.4.7 на 17,04.

2
задан 27 June 2017 в 17:21

1 ответ

Проблема с Вашим watch -n 1 tail -n 15 /var/log/syslog | grep -v -E 'pattern1|pattern2', я думаю , то, что она выполняет tail -n 15 /var/log/syslog внутренний watch, затем передает результат по каналу к grep. Это почти наверняка заставляет промежуточный вывод быть буферизованным таким способом, которым Вы не видите то, что Вы ожидаете (по крайней мере, не, когда Вы будете ожидать это).

существует, вероятно, способ достигнуть того, что Вы хотите с умным использованием stdbuf и/или --line-buffered grep опция, однако более простой путь состоит в том, чтобы выполнить целый конвейер в watch:

watch -n 1 'tail -n 15 /var/log/syslog | grep -v -E "pattern1|pattern2"'
0
ответ дан 2 December 2019 в 08:52

Другие вопросы по тегам:

Похожие вопросы: