Nowe posty

Autor Wątek: Skrypt ktory sprawdza dzialanie innego skrypu  (Przeczytany 5784 razy)

gajo10

  • Gość
Skrypt ktory sprawdza dzialanie innego skrypu
« dnia: 2008-12-16, 17:05:36 »
Skrypt ktory sprawdza dzialanie innego skrypu. Ciekawe kto mi pomoże?!
Witam. Potrzebuje skrypcik x , ktory bedzie sprawdzal dzialanie programu y.
Problem polega na tym ze program y, jest podlaczomy przez com do pewnego interfejsu.
Czasami zdarza sie ze interfejs sie zawiesi i potrzebny jest restart.

Pytanie brzmi. Czy mozna zrobic skrypt ktory monitoruje program y, a w razie zwisu interfejsu( dokladnie program wywala wiadomość CARD INIT FAILD ) wykonał jego restart
killall y
sh y start.

brograf

  • Gość
Skrypt ktory sprawdza dzialanie innego skrypu
« Odpowiedź #1 dnia: 2008-12-16, 19:11:59 »
while [ 1 ]; do
uruchom_program;
done; # :)

PS
w jaki sposób wywalany jest ten komunikat? proces się kończy, czy działa dalej?

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Skrypt ktory sprawdza dzialanie innego skrypu
« Odpowiedź #2 dnia: 2008-12-16, 19:39:20 »
Brakuje tylko jednej informacji: czy program "y" wywala tę wiadomość na standardowe wyjście STDOUT, czy na wyjście błędów STDERR?

I czy "CARD INIT FAILD" jest osobną linią tekstu, czy to po prostu ciąg znaków "CARD INIT FAILD" niekoniecznie zaczynający się w nowej linii i/lub nie zakończony znakiem nowej linii?

gajo10

  • Gość
Skrypt ktory sprawdza dzialanie innego skrypu
« Odpowiedź #3 dnia: 2008-12-16, 21:59:37 »
Trudno powiedziec. Jak cos moge programik na prv wyslac.

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Skrypt ktory sprawdza dzialanie innego skrypu
« Odpowiedź #4 dnia: 2008-12-17, 19:35:22 »
Możesz spróbować czegoś takiego:
#!/bin/bash

START="sh y start"
PROCES="y"

while true; do
  while read line; do
    echo "$line"
    if [ "$line" == "CARD INIT FAILED" ]; then
      killall "$PROCES"
      break
    fi
  done < <( ${START} 2>&1 )
done
Generalnie powinno się pobierać PID wywołanego procesu, i tylko jego ubijać, zamiast używać killall. Ale nie wiem, czy da się to prosto osiągnąć w Bashu.

Jeżeli to nie zadziała, możesz podesłać program, to zobaczę, jak powinno być. Mail jest w profilu.

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Skrypt ktory sprawdza dzialanie innego skrypu
« Odpowiedź #5 dnia: 2009-01-05, 21:27:21 »
Cytat: gajo10
#!/bin/bash

 START="cardserver"
 PROCES="cardserver"

while true; do
 while read line; do
   echo "$line"
   if [ "$line" == "Card 0/0 init failed" ]; then
     killall "$PROCES"
     break
   fi
 done < <( ${START} 2>&1 )
done
a tak wygada program ktory przerobilem, obserwowalem jego dzialanie
przez 2 dni i na 99% niechodzi.
Czy po uruchomieniu z tego skryptu serwer jest uruchamiany i pełni swoją rolę (oczywiście do czasu wspomnianego błędu)? Chodzi mi o to, czy w ogóle działa włączanie serwera.

Jaka będzie zawartość pliku output.txt po odpaleniu programu w ten sposób:
cardserver 2>&1 > output.txt
?

Pozdrawiam.

gajo10

  • Gość
Skrypt ktory sprawdza dzialanie innego skrypu
« Odpowiedź #6 dnia: 2009-01-08, 12:49:56 »
w output.txt znalazlem problem, mianowicie cardserver czasami wywala jeszcze inny blad Card 0/0 communication error (ECM), trying to reset. Teraz pytanie jak umiescic ten blad dodatkowo w skrypcie.?

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Skrypt ktory sprawdza dzialanie innego skrypu
« Odpowiedź #7 dnia: 2009-01-11, 18:55:35 »
Dopiero teraz udało mi się dorwać do neta :)

Więc, możesz albo dodać drugiego if-a, albo zrobić warunek obejmujący oba błędy:
...
if [ "$line" == "Card 0/0 init failed" ] || [ "$line" == "Card 0/0 communication error (ECM), trying to reset" ]; then
...