Здравствуйте! У меня две задачи. Помогите люди умный и добрые их решить.1. Мне необходимо как-то понять какие НОВЫЕ строки появились за последние 10 секунд в файле,
2. Получится многострочный результат и этот результат вывести в роли переменной каждую строку.Привожу пример:
В /var/log/messages постоянно пишется информация.
1. Нужно как-то вычислить что за 10 секунд появились новые строки такого вида:
Server kernel: pid 71863 (httpd), uid 0: exited on signal 10 (core dumped)
Server last message repeated 2 times
Server last message repeated 2 times
Server last message repeated 2 times2. Каждую строку объявить в роли переменной, допустим $str[1], $str[2], $str[3], $str[4].....
?????
Утилитка есть такая - logsentry. :) Вот она делает то, что Вы описали. Будучи запущенной в кроне. http://etutorials.org/Linux+systems/red+hat+linux+bible+fedo.../
> Утилитка есть такая - logsentry. :) Вот она делает то, что Вы
> описали. Будучи запущенной в кроне. http://etutorials.org/Linux+systems/red+hat+linux+bible+fedo.../Отлично, с первой проблемой разобрался, а теперь как каждой строку вывести как переменную?
#!/bin/sh
vars=`/usr/local/bin/logtail /var/log/messages`
for i in $vars; do fetch "http://127.0.0.1/?res=$i" >/dev/null 2>&1; doneВопрос почти решен. Только вот for читает по словам а не по строкам. Как сделать что-бы по строкам считал? а так все отлично работает...
> Как сделать что-бы по строкам считал?
oldIFS=$IFS;
for (;;)
do
cp /var/log/messages /tmp/;
TIME=$(date +%s);
sleep $(10-$((sTIME-TIME)));
sTIME=$(date +%s);
IFS=$'\n';
LINES=($(diff -u /var/log/messages /tmp/messages));
while i < LINES[@]
do
echo $LINES[i];
done
done
IFS=$oldIFS;
...
> for i in $vars; do fetch "http://127.0.0.1/?res=$i" >/dev/null 2>&1; done
> строкам. Как сделать что-бы по строкам считал?while read i; do fetch "http://127.0.0.1/?res=$i" >/dev/null 2>&1; done <<<"$vars"