заметил странную работу утилиты
tail
Использую чистую инсталляцию Debian Squeeze x64.
Наблюдаю за логами апача
1. просто tail -f access.log - всё нормально, новые записи отображаются сразу
2. tail -f access.log | awk {'print $7'} - вот здесь проявляется проблема
а) после ввода команды не показываются последние 10 записей, как должно быть по-умолчанию
б) такое ощущение, что есть кэширование на запись и вывод новых записей идёт скопом по несколько штук за раз (от 20 новых записей строго)
на двух машинах с Debian Squeeze x64 такая ситуация, на машине с Debian Lenny x64 всё нормально.
tail -f показывает записи с задержкой (блоками по 20+ штук)
Поле $7 вручную проверяли ? срабатыает?
awk {'print $7'} - по синтаксису вроде должно быть awk '{print $7}'
б) такое ощущение, что есть кэширование на запись и вывод новых записей идёт скопом по несколько штук за раз (от 20 новых записей строго)
Это надо смотреть настройки системного логера.
Поле $7 вручную проверяли ? срабатыает?
awk {'print $7'} - по синтаксису вроде должно быть awk '{print $7}'
Что значит проверял вручную?
Синтаксис немного хромает ) С правильным тоже самое.
Это надо смотреть настройки системного логера.
Так вот дело в том, что это не системный лог, а лог апача, и новые записи туда апач пишет исправно не через сислог.
Сейчас проверил
tail -f access.log | grep GET
работает как надо, записи отображаются по мере добавления
может проблема в awk ?
буфер какой-то есть?
jamcb, так если смотреть на awk в $7 инфа и она в седьмое поле, если GET то это 6 поле:
т.е.
marina# tail -f httpd-access.log | awk '{print $6}'
"GET
"GET
"GET
"GET
"GET
"GET
"GET
"GET
"GET
"GET
^C
и
marina# tail -f httpd-access.log | awk '{print $7}'
/cgi-bin/block.cgi?clientaddr=192.168.0.43&clientname=&clientident=&clientgroup=sample-clients&targetgroup=in-addr&url=http://92.241.174.131/icon/post/5.jpg
/cgi-bin/block.cgi?clientaddr=192.168.0.43&clientname=&clientident=&clientgroup=sample-clients&targetgroup=ads&url=http://www.tns-counter.ru/V13a***R>http://www.odnoklassniki.ru/*odnoklassniki_ru/ru/UTF-8/tmsec=odnoklassniki_site/103935592
/cgi-bin/block.cgi?clientaddr=192.168.0.32&clientname=&clientident=&clientgroup=sample-clients&targetgroup=ads&url=http://www.tns-counter.ru/V13a***R>*vkontakte_ru/ru/UTF-8/tmsec=vkontakte_total/54604137
/cgi-bin/block.cgi?clientaddr=192.168.0.43&clientname=&clientident=&clientgroup=sample-clients&targetgroup=ads&url=http://googleads.g.doubleclick.net/pagead/test_domain.js
/cgi-bin/block.cgi?clientaddr=192.168.0.43&clientname=&clientident=&clientgroup=sample-clients&targetgroup=ads&url=http://www.tns-counter.ru/V13a***R>http://www.odnoklassniki.ru/*odnoklassniki_ru/ru/UTF-8/tmsec=odnoklassniki_site/11053223
/cgi-bin/block.cgi?clientaddr=192.168.0.32&clientname=&clientident=&clientgroup=sample-clients&targetgroup=ads&url=http://www.tns-counter.ru/V13a***R>*vkontakte_ru/ru/UTF-8/tmsec=vkontakte_total/95949598
/cgi-bin/block.cgi?clientaddr=192.168.0.32&clientname=&clientident=&clientgroup=sample-clients&targetgroup=ads&url=http://www.tns-counter.ru/V13a***R>*vkontakte_ru/ru/UTF-8/tmsec=vkontakte_total/415071014
/cgi-bin/block.cgi?clientaddr=192.168.0.32&clientname=&clientident=&clientgroup=sample-clients&targetgroup=ads&url=http://www.tns-counter.ru/V13a***R>*vkontakte_ru/ru/UTF-8/tmsec=vkontakte_total/927305022
/cgi-bin/block.cgi?clientaddr=192.168.0.32&clientname=&clientident=&clientgroup=sample-clients&targetgroup=ads&url=http://www.tns-counter.ru/V13a***R>*vkontakte_ru/ru/UTF-8/tmsec=vkontakte_total/638590689
/cgi-bin/block.cgi?clientaddr=192.168.0.32&clientname=&clientident=&clientgroup=sample-clients&targetgroup=ads&url=http://www.tns-counter.ru/V13a***R>*vkontakte_ru/ru/UTF-8/tmsec=vkontakte_total/202297345
^C
p.s.
marina# uname -srm
FreeBSD 8.1-RELEASE-p2 i386
marina# echo $SHELL
/bin/csh
А вообще это зависит как пишет apache в лог и не более того.
Спасибо за уделённое время!
Проблема в awk
для вывода используется буфер
переводим awk в интерактивный режим опцией -W interactive
новые записи не кэшируются, отображаются сразу
интересно знать, почему у вас работает как надо, а на чистом дебиане нет )
А вообще это зависит как пишет apache в лог и не более того.
апач пишет нормально, tail -f лог показывает всё сразу, а если пустить через awk, то проблема.
Advanced Notes: Interactive Versus Noninteractive Buffering
-----------------------------------------------------------
As a side point, buffering issues can be even more confusing, depending
upon whether your program is "interactive", i.e., communicating with a
user sitting at a keyboard.(1)
Interactive programs generally "line buffer" their output; i.e., they
write out every line. Noninteractive programs wait until they have a
full buffer, which may be many lines of output. Here is an example of
the difference:
$ awk '{ print $1 + $2 }'
1 1
-| 2
2 3
-| 5
Ctrl-d
Each line of output is printed immediately. Compare that behavior with
this example:
$ awk '{ print $1 + $2 }' | cat
1 1
2 3
Ctrl-d
-| 2
-| 5
Here, no output is printed until after the `Ctrl-d' is typed, because
it is all buffered and sent down the pipe to `cat' in one shot.
BSD:
-f The -f option causes tail to not stop when end of file is
reached, but rather to wait for additional data to be appended to
the input. The -f option is ignored if the standard input is a
pipe, but not if it is a FIFO.
linux
-f, --follow[={name|descriptor}]
output appended data as the file grows; -f, --follow, and --follow=descriptor are equivalent
попробуй ключик -F использовать:
With --follow (-f), tail defaults to following the file descriptor, which means that even if a tail'ed file is renamed, tail will continue to track its end. This default behav-
ior is not desirable when you really want to track the actual name of the file, not the file descriptor (e.g., log rotation). Use --follow=name in that case. That causes tail
to track the named file by reopening it periodically to see if it has been removed and recreated by some other program.
апач пишет нормально, tail -f лог показывает всё сразу, а если пустить через awk, то проблема.
Ммм...
попробуй ключик -F использовать:
не помогает
2 i2ks
ужё всё гуд, в интерактивном режиме awk работает как надо
я выше описал
спасибо за помощь )
2 i2ks
ужё всё гуд, в интерактивном режиме awk работает как надо
я выше описал
спасибо за помощь )
Да сам хоть буду знать по поводу ключей. :rolleyes: