LINUX.ORG.RU

Bash не хочет парсить логи по живому


0

0

Здраствуйте, имеется сервер exim с задержкой в 30 секунд перед приемом почты :

  warn
        set acl_m0 = 30s
  warn
        logwrite = Delay $acl_m0 for $sender_host_name \
[$sender_host_address] with HELO=$sender_helo_name. Mail \
from $sender_address to $local_part@$domain.
        delay = $acl_m0
хочется выполнять чтото вроде tail -f /var/log/exim4/mainlog |grep unexpected | ./script таким образом чтобы все получаемые ипы тутже блокировались

myuser@myserver:/home/scripts/iptable# cat add 
#!/bin/bash
while read r
do
s=`echo $r | sed "s/\].*//; s/.*\[//"`;
r=`echo $s`;
iptables -A INPUT -s $r -j REJECT
echo "$r">>/home/scripts/iptable/mail
echo "$r";
done

PS пример лога: 2009-12-24 15:39:20 unexpected disconnection while reading SMTP command from (bezeqint.net) [109.67.23.150] I=[myserver]:25

это все дело не работает. Причина неясна, однако интуиция подсказывают что дело в цикле while. Спасибо огромное за любую оказанную помощь.


$ echo «2009-12-24 15:39:20 unexpected disconnection while reading SMTP command from (bezeqint.net) [109.67.23.150] I=[myserver]:25» | ./1.sh
109.67.23.150

$ cat 1.sh
#!/bin/bash
while read r
do
s=`echo $r | sed «s/\].*//; s/.*\[//»`
r=`echo $s`
echo «$r»
done


Всё работает. Что у тебя конкретно не работает?

alex_custov ★★★★★
()
Ответ на: комментарий от alex_custov

хочется запустить гдето в скринах tail -f /var/log/exim4/mainlog | ./1.sh

то есть работать на лету аналогичные cat и прочая работают, а вот так не хочет

offtop
() автор топика

Причина неясна

Думаю причина в буферизации. Попробуй добавить опцию --line-buffered к grep.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.