[linux] script

Jarry guru jarry na gmx.net
Středa Prosinec 1 12:59:53 CET 1999


Ivan Malich wrote:
> Takto to ide, len to vypisuje chybove hlasky, to si ale dorob, daj to do
> cyklu a mas to. Pripadne to mozes spustat kazdu sekundu (sleep 1) a
> myslim, ze by to slo. Bude to ale asi dost pomale...
>
> #!/bin/sh 
> prem=`cat /var/log/messages | tail -1 | grep -i 'fail\|unauthorised'`
> if ["$prem" = ""]; then
>         echo nie je tam...
> else
>       echo "je tam... ($prem)"
> #       mail ja...
> fi

Naozaj je to dost pomale (/var/log/messages <= 64kB!).
A zda sa mi to zbytocne (alebo tomu nerozumiem). Ved namiesto:
prem=`cat /var/log/messages | tail -1 | grep -i 'fail\|unauthorized'`
mozem dat rovno:
prem=`tail -1 | grep -i 'fail\|unauthorized'`
"cat" len vylistuje subor pre "tail", a to "tail" zvladne aj sam.

A tym ze vyhodim z tail prepinac -f, stracam tym prave tu uzitocnu
vlastnost, ze /var/log/messages sa sleduje tak, ako narasta.
Spustat po sekunde to nepomoze, moze bud prepast niektore hlasenie
(ak medzitym pribudli dve) alebo niektore zaregistrovat dva krat
(ak medzitym nepribudlo ani jedno).

Myslim, ze tento riadok riadok je dobry:
tail -0 -f /var/log/messages | grep -i 'failed\|unauthorized'

Dostavam presne co potrebujem, a hned ako sa to v messages objavi.
Bohuzial, iba na obrazovku. Nie do premennej, ktora by sa vzdy
kazdym novym riadkom z grepu prepsala...

BTW, napisal som ten tvoj skript a spustil, tu je vystup:
# ./test2
./test2: [bla-bla 1 FAILED LOGINS FROM bla-bla: command not found
je tam... (bla-bla 1 FAILED LOGINS FROM bla-bla)
#

Co to tam ma byt, to "command not found"? Preco chce ten vystup
vykonat ako prikaz?
------------------------------------------------------------------------
Lubos Kaspar wrote:

> Z 'tail -f|grep' by to snad slo cpat (pchat) do nejakeho pseudosouboru
> typu "named pipe" a z nej to pak jinym skriptikem cist nejakou
> nekonecnou smyckou typu "while true; do read x; akce $x; done" (ksh)
> nebo tak nejak. (Bez zaruky.)

Hm, skusil som presmerovat vystup z obrazovky do obycajneho suboru:
#!/bin/sh
tail -0 -f /var/log/messages | grep -i 'failed\|unauthorized' >> found

"found" sa sice vytvori, ale je stale prazdny! Co ma byt zase toto?
Grep nedokaze zapisovat do suboru? Jedine do named pipe? Ako sa s tymi
potvorami pracuje?
-----------------------------------------------------------------------
BYS5_Linux_Diskusia na softip.sk wrote:
...
> 1. skusit to realizovat cez pomenovanu ruru ( named pipe vid man mkfifo
),
> tu by vsak bol problem so zablokovanim zapisujuceho procesu, v case ked
> citajuci proces nestiha spracovavat. Co asi nie je najlepsie

... a navyse s tymito "named pipes" vobec neviem pracovat...   :-(

> 2. napisat pozadovany scrip tak aby cital zo standardneho vstupu
> tail -f /var/log/messages | grep "......" | moj.script
> Pricom moj.script by mohol vyzerat ( vyber scriptovacieho jazyka je
> lubovolny )
> #!/usr/bin/ksh
> while read premenna ; do
>      # akcia co sa ma robit
> done

To je presne to, co by som potreboval! Prepajpovat to tak, aby sa
moj.script vykonal vzdy vtedy a len vtedy, ked nieco vypadne z
grepu. Ok, napsal som takyto moj.script:

#!/bin/sh
while read premenna; do
echo $premenna            # chcem len vediet, ci ju ozaj nacital!
done

a teraz:
# tail -0 -f /var/log/messages | grep -i 'failed\|unauthorized' |
./moj.script
Ctrl-C
#

a nic! Ziaden vypis, hoci som v dalsom okne sledoval /var/log/messages.
Cesta zadana, pristupove prava 700, a nic! "moj.script" nic nevypisal...

Ma niekto nejaky dalsi napad/tip?
Pre zopakovanie, potrebujem, aby sa vzdy riadok, ktory vypadne z
tail -0 -f /var/log/messages | grep -i 'failed\|unauthorized'
nejako dosadil ako SUBJECT do mailu, a poslal sa na istu adresu. HOWTO?

Jarry

-- 
Sent through Global Message Exchange - http://www.gmx.net




Další informace o konferenci linux