Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

BASH: while:; do ssh $adr; done - NE PONAVLJA u skripti

[es] :: Skript jezici :: BASH: while:; do ssh $adr; done - NE PONAVLJA u skripti

[ Pregleda: 13490 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

pisac

Član broj: 13046
Poruke: 4578



+3341 Profil

icon BASH: while:; do ssh $adr; done - NE PONAVLJA u skripti27.07.2017. u 19:11 - pre 81 meseci
Kada u konzoli otkucam...

while:; do ssh 192.168.0.2 tail -F /var/log/messages; sleep 1; done

...to lepo radi. Kada se veza sa udaljenim 192.168.0.2 prekine (recimo restartuje se) ponovo se uspostavi i nastavlja praćenje log fajla.

Međutim, pošto ja otvaram gomile takvih prozora za razne adrese, mrzi me da svaki put kucam tu kobasicu već sam hteo sve da stavim u skriptu. Problem je što tada while jednostavno ne radi, veza se uspostavi samo jednom a posle prekida veze skripta završava umesto da ponavlja beskonačnu while petlju. Zašto?

evo iz glave otprilike ovako nešto, ne radi:
Code:

#!/bin/bash

if [ "$1" = "" ];then
    echo "Nedostaje adresa"
    exit 1
fi

while :;
do
    ssh $1 tail -F /var/log/messages
    sleep 1
done
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: BASH: while:; do ssh $adr; done - NE PONAVLJA u skripti27.07.2017. u 19:50 - pre 81 meseci
Ne treba ti ; kada nije sve u istoj linij - zbog toga ne radi...

U stvari, sada sam testirao, ne smeta. Mada, ako je iz glave, mozda si nesto drugo pogresio. Da, vise volim da testiram sa
if [ -z "$1" ]
ali to je stvar navike iz SQL-a i three-state logike
 
Odgovor na temu

Miroslav Strugarevic

Član broj: 5038
Poruke: 2689



+68 Profil

icon Re: BASH: while:; do ssh $adr; done - NE PONAVLJA u skripti27.07.2017. u 20:15 - pre 81 meseci
Ja sam reprodukovao kod sebe na sledeci nacin i meni sve radi tj. komanda i skripta ne prekidaju execution u slucaju pada mreze ili u tvom slucaju neuspesne ssh remote komande. Jedino mi se desi da skripta prekine ako imam setovano /bin/bash -e (errexit) kao interpreter.

Kako sam testirao:

1) Podigao python SimpleHTTPServer kod sebe da glumi remote stranu.

2) Pokrenuo komandu i iz druge sesije uradio ifconfig lo0 down. U ovom slucaju komanda radi i dalje samo daje gresku da ne moze da se konektuje na localhost.

3) Kad dignem interfejs ifconfig lo0 up komanda nastavlja da radi bez problema.

4) Po default podesavanju na macOS-u /bin/bash interpreter ne prave probleme tako da komanda i skripta rade okej u oba slucaja. Ako ubacim /bin/bash -e kao interpreter onda skripta izlazi kad je non-zero exit status tvoje remote ssh komande.

Mene ovo navodi da mislim da ti imas /bin/bash -e setovan za default interpreter (ne znam gde i kako) i da ti skripta prekida zbog non-zero exit statusa (tj. kad je mreza down, ili kada je ssh remote komanda neuspesna, recimo).

Probaj da dodas command || true kao dodatak tvoje ssh komande da vidis da li ce da radi. Nisam koristio ssh sto je mozda glupo ali nisam imao nikakvu remote masinu ili VM spremnu ali kapiram da je reprodukcija okej i sa curl-om.

Pogledaj - http://recordit.co/tZQR8NFzOE

[Ovu poruku je menjao Miroslav Strugarevic dana 28.07.2017. u 00:27 GMT+1]
 
Odgovor na temu

pisac

Član broj: 13046
Poruke: 4578



+3341 Profil

icon Re: BASH: while:; do ssh $adr; done - NE PONAVLJA u skripti28.07.2017. u 00:46 - pre 81 meseci
Moja greška.
Kada sam shvatio da kod drugih radi a kod mene ne, onda sam taj primer "iz glave" napisao i u skripti i zasta radi

Onda sam gledao moju originalnu skriptu, koja je prilično komplikovanija od onoga što sam napisao ovde jer sam tamo predvideo i unos pseudonima umesto adrese hosta, radi brzeg kucanja. Taj pseudonim pretvaram u komandu tako što u programu imam više variabli (koje predstavljaju hostove) sa svojim parametrima za spajanje (host1="ssh -C -p 2356 192.168.0.2") pa onaj pseudonim koji je unet u komandnoj liniji postaje komanda tako što radim eval ssh=\$$1, a ostak argumenata postaje komanda koja se šalje udaljenom serveru.

E problem je bio samo u tome što sam kasnije u kodu iz nekog razloga stavio
Code:

    exec $ssh $komande

umesto
Code:

    $ssh $komande
 
Odgovor na temu

[es] :: Skript jezici :: BASH: while:; do ssh $adr; done - NE PONAVLJA u skripti

[ Pregleda: 13490 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.