Program bash, ktory auromatycznie resetuje się po błędzie.

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
gajo10
Piegowaty Guziec
Piegowaty Guziec
Posty: 19
Rejestracja: 22 gru 2007, 19:38
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Kontakt:

Program bash, ktory auromatycznie resetuje się po błędzie.

Post autor: gajo10 »

Witam. Szukam rozwiązania tego problemu, Program x wywala 3 rózne błędy bo taki już jest jego urok.Szukam czegoś co restartowało by program x po jednym z tych błedów.Wymyśliłem sobie takie coś, ale nie działa.Prosze o pomoc, literówki przy błedach wykluczone.

Kod: Zaznacz cały

#!/bin/bash
START="x"
PROCES="x"
while true; do
  while read line; do
    echo "$line"
    if [ "$line" == "blad a" ] || [ "$line" == "blad b" ] || [ "$line" == "blad c" ] ;then
      killall "$PROCES"
      break
    fi
  done < <( ${START} 2>&1 )
done
Awatar użytkownika
хur
Sędziwy Jeż
Sędziwy Jeż
Posty: 79
Rejestracja: 15 sty 2008, 23:40
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne

Odp: Program bash, ktory auromatycznie resetuje się po błędzie.

Post autor: хur »

to nie ma prawa działać :> btw, planujesz pracę równoległą że używasz killall ?

Kod: Zaznacz cały

#!/bin/bash

test_var=$RANDOM

while read line; do
    [[ "$line" == "exit" ]] && exit
    [[ "$line" == "blad a" || "$line" == "blad b" || "$line" == "blad c"  ]] && exec "$0"
    echo "test_var: $test_var, input: $line."
done
test:

Kod: Zaznacz cały

>>> ./shtest.sh 
wlaz kotek na płotek
test_var: 2469, input: wlaz kotek na płotek.
ala ma kota
test_var: 2469, input: ala ma kota.
blad a
powinno być już po restarcie
test_var: 14881, input: powinno być już po restarcie.
jak widać dziaua
test_var: 14881, input: jak widać dziaua.
blad b
zaraz to taka wielka bakteria
test_var: 23402, input: zaraz to taka wielka bakteria.
też dziaua, więc spadam
test_var: 23402, input: też dziaua, więc spadam.
exit
>>>
chodzi Ci o coś takiego ?
gajo10
Piegowaty Guziec
Piegowaty Guziec
Posty: 19
Rejestracja: 22 gru 2007, 19:38
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Kontakt:

Odp: Program bash, ktory auromatycznie resetuje się po błędzie.

Post autor: gajo10 »

Tak. Ale zeby dzialało z programem x. Thx za odpowiedź.
Awatar użytkownika
хur
Sędziwy Jeż
Sędziwy Jeż
Posty: 79
Rejestracja: 15 sty 2008, 23:40
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne

Odp: Program bash, ktory auromatycznie resetuje się po błędzie.

Post autor: хur »

tzn że plik z kodem ma się nazywać x ?
ten kod który zapodałem we wcześniejszym poście będzie działać bez względu na to jak się nazywa plik który go zawiera...
gajo10
Piegowaty Guziec
Piegowaty Guziec
Posty: 19
Rejestracja: 22 gru 2007, 19:38
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Kontakt:

Odp: Program bash, ktory auromatycznie resetuje się po błędzie.

Post autor: gajo10 »

tzn ze binarka nazywa sie x.Dokładnie chodzi o to zeby program x1(czyli twoja propozycja rozwiązania), odpalała x i kontrolowała te błedy,Nie znam jeszcze tak dobrze basha, po dłuższym namyśle zrozumiałem w końcu o co chodzi w twoim rozwiązaniu. A nad bashem pracuje z Programowanie w powłoce
autorstwa: Radka Przychody i mam trochę ograniczony czas.:pt36::pt36:
Awatar użytkownika
хur
Sędziwy Jeż
Sędziwy Jeż
Posty: 79
Rejestracja: 15 sty 2008, 23:40
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne

Odp: Program bash, ktory auromatycznie resetuje się po błędzie.

Post autor: хur »

a to inna para kaloszy

nie pisałeś wcześniej o dwu skryptach (x i x1) tylko
o jednym więc myślałem że ma wywoływać sam siebie.

Jeśli mają być dwa to Twój kod wygląda dość sensownie,
dopisałem przykład dzięki czemu mogłem przetestować,
trochę zmieniłem bo killall wydaje mi się tu nieeleganckie.
Wygląda na to że działa.
x (ten przykładowy) :

Kod: Zaznacz cały

#!/bin/bash

while : ; do (((RANDOM%4) == 0)) && echo 'blad a' || echo gazonk ; sleep 2 ; done
x1:

Kod: Zaznacz cały

#!/bin/bash

START='x'
START_PATH='';

which "$START" > /dev/null || START="${START_PATH:-./}${START}"

while true ; do

    while read line ; do
        [[ -z $c_pid ]] && c_pid="$line" || echo "input: $line, ${START}'s PID: $c_pid";
        [[ "$line" =~ blad\ [abc] ]] && { kill "$c_pid" ; unset c_pid ; break ; }
    done < <(sh -c "echo \$\$ ; exec $START" 2>&1)

    echo ; echo " ! $START restarted !" ; echo
done 2> /dev/null
test:

Kod: Zaznacz cały

>>> ./x1
input: gazonk, ./x's PID: 12011
input: blad a, ./x's PID: 12011

 ! ./x restarted !

input: gazonk, ./x's PID: 12016
input: gazonk, ./x's PID: 12016
input: gazonk, ./x's PID: 12016
input: gazonk, ./x's PID: 12016
input: gazonk, ./x's PID: 12016
input: blad a, ./x's PID: 12016

 ! ./x restarted !

input: blad a, ./x's PID: 12029

 ! ./x restarted !

input: gazonk, ./x's PID: 12032
input: blad a, ./x's PID: 12032

 ! ./x restarted !

input: gazonk, ./x's PID: 12037
input: gazonk, ./x's PID: 12037
input: gazonk, ./x's PID: 12037
^C
>>>
gajo10
Piegowaty Guziec
Piegowaty Guziec
Posty: 19
Rejestracja: 22 gru 2007, 19:38
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Kontakt:

Odp: Program bash, ktory auromatycznie resetuje się po błędzie.

Post autor: gajo10 »

W nocy bede testował na pierwszy rzut oka wygląda obiecująco. THX:clap::clap:
Awatar użytkownika
хur
Sędziwy Jeż
Sędziwy Jeż
Posty: 79
Rejestracja: 15 sty 2008, 23:40
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne

Odp: Program bash, ktory auromatycznie resetuje się po błędzie.

Post autor: хur »

zwróć uwagę że zabijam jedną istancję programu,
tę uruchomioną przez skrypt,
jeśli to coś co tam masz działa jako grupa procesów
(i namnaża się samo)
o takiej samej nazwie to faktycznie killall może być
ok. W sumie to nie sprawdzałem co w Twoim kodzie
nie działa, być może nie miałeś ustawionej ścieżki do programu ;p

jeśli to jest jakiś deamon to lepiej nie używać takiego
czy innego killa tylko gotowego skryptu który jest
w systemie.

EDIT:
dokładnie tak jak myślałem, nie masz ustawionej ścieżki,
po zmianie START="x" na START="./x" Twój skrypt zadziałał ;p
gajo10
Piegowaty Guziec
Piegowaty Guziec
Posty: 19
Rejestracja: 22 gru 2007, 19:38
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Kontakt:

Odp: Program bash, ktory auromatycznie resetuje się po błędzie.

Post autor: gajo10 »

OK dzieki
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 19 gości