Portál AbcLinuxu, 7. května 2025 07:28

Dotaz: BASH, prikaz "test" a otestovani obsahu souboru

3.7.2017 14:22 Jix0 | skóre: 24 | blog: Not only for humans
BASH, prikaz "test" a otestovani obsahu souboru
Přečteno: 392×
Odpovědět | Admin
Dobrý den.

Upravuji skript, ktery nam hlida kamerovy system ktery mame v provozu.

Situace je takova, ze streamovani provadime pomoci FFMpeg, ktere zapisuje svuj stav do log souboru, ze ktereho ja nasledne budu cist urcity retezec Jelikoz stream se obcasne pri velkem packet lossu nekdy rozpadne, ale spojeni zustane viset, potrebuji osetrit podminku, pri ktere se stream restartuje. Kdyz se objevi chyba, vzdy stream pak zacne zpomalovat sve fps a tato skutecnost se i objevi v logu.

Retezec o ktery se jedna je nasledujici:
frame=28634 fps= 20 q=0.0 size=  198848kB time=00:23:51.65 bitrate=1137.8kbits/s
Potrebuju prave vycist tu hodnotu "fps= xx" a nasledne pak provest akci. Cele to pobezi ve while smycce Pouzil jsem pro to prikaz test, ale nejak mi to neprovadi to co by melo a nejsem si jist, kde delam chybu. Byl bych tedy vdecny za radu.

Nyni mam vytvoreno neco takoveho:
#!/bin/bash


while :
  do [[ $(tail -c 4096 /dev/shm/ffmpeg-girova.log | egrep 'fps= 18|fps= 17|fps= 16|fps= 15') = 'fps= 18|fps= 17|fps= 16|fps= 15' ]] && echo "Problem se streamem" || echo "kamera OK"
sleep 10
done
I pokud se objevi dany retezec v logu, stejne se mi ale provede jen ta cast || echo "kamera OK".. (Misto echo budou jine prikazy, toto jsem zvolil jako testovaci priklad.

Budu rad za jakekoliv postrceni spravnym smerem. Predem diky za odpovedi
If you will not cooperate, you are to be executed! | Starting as a DJ
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

3.7.2017 15:18 NN
Rozbalit Rozbalit vše Re: BASH, prikaz "test" a otestovani obsahu souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
#!/bin/bash

FPS=$($(tail -c 4096 /dev/shm/ffmpeg-girova.log | sed 's/.*fps= \([0-9]*\).*/\1/')

if [ $FPS -lt 18 ]; then
  echo "Nizke FPS." >> /tmp/fps.log;
else
  echo "Kamera ok." >> /tmp/fps.log;
fi
Dej to do cronu a kontroluj kazdych 5 minut.
3.7.2017 20:09 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: BASH, prikaz "test" a otestovani obsahu souboru
Ještě by asi bylo lepší číst každý řádek logu, tj. nespouštět to z cronu.

Takhle by totiž ta chyba mohla v logu „utéct“, takže by ji skript za 5 min už nezachytil, ne?

Bude to samozřejmě trochu náročnější na výkon.
-- OldFrog
4.7.2017 08:24 Jix0 | skóre: 24 | blog: Not only for humans
Rozbalit Rozbalit vše Re: BASH, prikaz "test" a otestovani obsahu souboru
Díky.. odzkousim to hned jak se k tomu dostanu. Bude se to spoustet primo ve skriptu pomoci while smycky misto cronu, potrebuji kontrolovat cca co 10 sekund. Jinak ja si totiz moc nerozumim se syntaxi prikazu "sed" a snažil jsem se to provést trochu jinak. Je mozne to udelat i nejak pomoci grep nebo neceho jineho krome sed, a porovnani primo presne casti retezce, tak jak jsem puvodne zamyslel?
If you will not cooperate, you are to be executed! | Starting as a DJ
jose17 avatar 4.7.2017 08:27 jose17 | skóre: 44 | blog: Joseho_blog | Bratislava
Rozbalit Rozbalit vše Re: BASH, prikaz "test" a otestovani obsahu souboru
bolo by uzitocne, keby si sem relevantnu cast logu (+ nejaku cast okolo nej) vlozil
Ja vim, on vi, ty nano!
4.7.2017 08:30 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: BASH, prikaz "test" a otestovani obsahu souboru

Např.

... | egrep -o 'fps= *[0-9]+' | while read v; do v="${v##*=}"; v="$[v]"; ... ; done

pokud vám nevadí, že se zahodí desetinná tečka a všechno za ní.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.