LinuxForum.Fans
Тема

Мониторинг..

Автор: colobok 14 сообщений 3836 просмотров
#331039

Нужно что-то вроде:

text
mkfifo f
# дальше процесс чота пишет в f
while cat < f
do
    if cat f | grep Ok > /dev/null
    then echo 'match!'
    fi
done 

(чтоб постоянно мониторило состояние процесса)
Это работает, но как-то некрасиво совсем, цикл опять же.. можно сделать как-то изящнее?

#331043
"colobok⇓" написал:
while cat < f
do
if cat f | grep Ok > /dev/null
then echo 'match!'
fi
done

Можно вместо cat < f, просто поставить true

text
while true
do
    if cat f | grep Ok > /dev/null
    then echo 'match!'
    fi
done
#331046

А без цикла никак?

#331047
"colobok⇓" написал:
А без цикла никак?

Команда watch не подойдёт?

#331048

Даже не знал о такой)) Спасибо.
Но все равно будет задержка на время ожидания watch, цикл и то адекватнее, поскольку не ждет.

#331049
"colobok⇓" написал:
Но все равно будет задержка на время ожидания watch, цикл и то адекватнее, поскольку не ждет

У watch можно выставить интервал опроса до 0,1 сек.

#331050
"colobok" написал:
цикл и то адекватнее, поскольку не ждет

Цикл без задержки выжрет весь процессор.

#331051
-=Serj=- написал:
Цикл без задержки выжрет весь процессор.

Ну в данном случае итерация происходит только когда что-то упадет в канал.

для меня проблема в том, что тут cat читает только раз, думал, что можно сделать, чтобы читало непрерывно))
может вообще без cat??

#331052
"colobok⇓" написал:
А без цикла никак?

Как вариант можно использовать tail для считывания потока, а цикл будет просто обрабатывать вывод.

text
tail -f f|while read file
do
if echo "$file" | grep Ok > /dev/null
then echo 'match!'
fi
done

т.е. не будет многократного запуска cat

#331054

Вопрос- а если использовать что-то, что работает с потоком, типа sed или awk? Наверно awk можно попросить выполнить каку-нибудь команду?

#331055

или как-то вроде
tail .. | grep Ok && exec ..

#331062

Наиболее простое решение:

text
tail -f f|awk '/Ok/ {print "match!"}'
#331071

Ну так же в разы красивее!? Осталось только мне разобраться как выполнить произвольную команду. Просто я-не-люблю-циклы! да и кто их любит :)

#331078
"colobok⇓" написал:
Ну так же в разы красивее!? Осталось только мне разобраться как выполнить произвольную команду.

Можно так

text
tail -f f|awk '/Ok/ {system ("ls -l")}'
Войдите или зарегистрируйтесь, чтобы ответить.