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

Как совместить часы реального времени с tail -F

Я всегда бегаю tail -F следить за журналом в окне терминала. В начале каждой записи в журнале указывается дата в формате UTC:

[08-Jan-2013 16:24:22] Yo!

Когда я смотрю в окно журнала, мне нужно знать, сколько лет этим записям. Я бы предпочел не смотреть на свои местные часы и заниматься математикой. Поэтому я подумал, что было бы здорово иметь отображение часов в реальном времени в окне вместе с tail выход.

Я придумал, что while петля echoв date и возврат каретки. Когда запись в журнале записана, tail перезаписывает часы.

while true; do echo -ne `date +"[%d-%b-%Y %H:%M:%S]"`"\r"; sleep 1; done &
log -F /path/to/log

Это в основном работает, но меня беспокоит, что происходит, когда выходы из tail и date одновременно производить продукцию. Я не хочу, чтобы мой вид журнала был испорчен возвратом каретки.

Как мне мультиплексировать эти выходы вместе, чтобы они не конфликтовали? Это работа для screen или что-то другое?

Журнал находится на удаленном сервере Debian. Моя рабочая станция работает под OSX. Я подключаюсь через SSH, чтобы запустить приведенный выше сценарий.

Вы можете посмотреть на многоцелевой; он поддерживает несколько окон с отдельными или объединенными файлами журналов, раскраску на основе регулярных выражений для каждого типа файла, параметры переноса слов, просмотр имени файла (полезно для файлов с измененным журналом) и многое другое.

Да, и часы в статусной строке.

Вы можете использовать параметр -s для хвоста, чтобы ваш хвост спал, скажем, 5 секунд:

-s, --sleep-interval=S
 with -f, sleep for approximately S seconds (default 1.0) between iterations.

tail -s 5 -f /var/log/messages

Или команда часов покажет вам дату:

watch --interval=5 tail  /var/log/messages

    Every 5.0s: tail /var/log/messages                 Tue Jan  8 17:52:41 2013

8 января 17:52:34 localhost kernel: НОВОЕ: IN = eth0 OUT = MAC = 00: 60: 56: 73: 14: 6b: 00: 50: 5b: 93: 49: 5d: 08: 00 SRC = 10.0.0. 0.2 DST = 10.0.0.1 LEN = 60 TOS = 0x00 PREC = 0x00 TTL = 64 ID = 29070 DF PROTO = TCP SPT = 50561 DPT = 25 WINDOW = 5840 RES = 0x00 SYN URGP = 0

Другое (не особенно хорошее) решение с использованием команды strace -t:

 strace -t tail -f /var/log/messages

Наконец, вы можете написать свою собственную модифицированную хвостовую команду в python / perl / ruby:

https://stackoverflow.com/questions/136168/get-last-n-lines-of-a-file-with-python-similar-to-tail

и просто добавьте дату / время чтения в строку вывода.