Yritän kirjoittaa bash-komentosarjan tiedostoon, joka käynnistyksen yhteydessä alkaisi pingata isäntää, kunnes se on käytettävissä , kun isäntä on tavoitettavissa, se suorittaa komennon ja lopettaa suorittamisen. Yritin kirjoittaa yhden, mutta komentosarja jatkaa pingointia, kunnes laskenta loppuu.
Plus minun on laitettava prosessi taustalle, mutta jos suoritan komentosarja, jossa on dollarin ($
) merkki, se toimii edelleen etualalla.
#!/bin/bash ping -c30 -i3 192.168.137.163 if [ $? -eq 0 ] then /root/scripts/test1.sh exit 0 else echo “fail” fi
Vastaa
Käytän tätä yksinkertaista yksirivistä:
while ! ping -c1 HOSTNAME &>/dev/null; do echo "Ping Fail - `date`"; done ; echo "Host Found - `date`" ; /root/scripts/test1.sh
Korvaa HOSTNAME
isännän kanssa, jota yrität pingata.
Kaipasin osaa sen asettamisesta taustalle, laita tuo rivi simpukakirjoitukseen:
#!/bin/sh while ! ping -c1 $1 &>/dev/null do echo "Ping Fail - `date`" done echo "Host Found - `date`" /root/scripts/test1.sh
Ja taustalla se suoritetaan niin:
nohup ./networktest.sh HOSTNAME > /tmp/networktest.out 2>&1 &
Korvaa uudelleen HOSTNAME
isännän kanssa, jota yrität pingata. Tässä lähestymistavassa välität isäntänimen argumenttina shelltiedostolle.
Aivan kuten yleinen varoitus, jos isäntäsi pysyy alhaalla, tämä komentosarja pingottaa jatkuvasti taustalla, kunnes joko tapat sen tai isäntä löytyy. Joten pidän sen mielessä, kun suoritat tätä. Koska saatat päätyä syömään järjestelmän resursseja, jos unohdat tämän.
Kommentit
Vastaa
Välittämällä parametrit ”-c 30” ping, se yrittää 30 pingiä ja lopettaa. Se tarkistaa, onnistuuko komento. Mielestäni on parasta tehdä silmukka, joka sisältää yhden pingin, ja tarkistaa, onnistuuko tämä ping. Jotain sellaista:
while true; do ping -c1 google.com if [ $? -eq 0 ] then /root/scripts/test1.sh exit 0 fi done
Jos ajamalla edelleen etualalla tarkoitat, että se vielä tulostaa päätelaitteelle, voit ohjata stdinin ja stdoutin osoitteeseen / dev / null.
Kommentit
- Vapauttamalla kehote, jotta voisin työskennellä jonkin muun suhteen, tnx apua
Vastaa
Vanha viesti, mutta ehdotuksena voit käyttää ping-vaihtoehtoa -w
Vältä silmukkaa. Esimerkiksi
ping -w 30 -c 1 host
yrittää 30 sekuntia yhdellä pingillä sekunnissa (oletuspingissä on 1 sekunnin taajuus pingien välillä) ja poistuu ensimmäisestä onnistuneesta pingistä .
Jos et tarvitse aikakatkaisua, eli odota ikuisesti, käytä vain erittäin suurta arvoa -w
-näppäimen kanssa.
vastaus
ping -oc 100000 Hostname > /dev/null && /root/scripts/test1.sh
-
ping -o
poistuuping
ensimmäisen paketin vastaanottamisen jälkeen -
> /dev/null
ohjaa lähdön, joten et näe sitä -
&&
suoritetaan seuraava komento, jos edellinen komento onnistuu
Lisäksi voit suorittaa minkä tahansa prosessin taustalla lisäämällä &
sen loppuun; esimerkiksi echo "123" &
toimii taustalla
Vastaa
Tässä toimii komentosarjan muokkaus.
#!/bin/bash ping -c1 10.1.1.23 > /dev/null if [ $? -eq 0 ] then echo ok exit 0 else echo “fail” fi
Sinun on lähetettävä lähtö osoitteeseen /dev/null
, jotta se ei tule näkyviin ruudulle.
-c
on tarkoitettu laskentaan. Jos laitat -c30
, aiot pingata 30 kertaa ennen kuin komentosarjasi voi siirtyä seuraavalle riville. Käytän komentoa -c1
, jotta komentosarja toimisi nopeammin.
-i
on odottaa sekunteja kunkin paketin lähettämisen välillä. Joten -i3
on odotettava 3 sekuntia. Poistan -i
, jotta komentosarja toimii nopeammin.
Viimeisenä mutta ei vähäisimpänä, käytä sisennystä, jotta koodi näyttää hyvältä ja helpommin luettavalta.
Esimerkkilähtö
user@linux:~$ ./script.sh ok user@linux:~$ user@linux:~$ ./script.sh “fail” user@linux:~$
Vastaa
#!/bin/sh if [ $1 ] then for i in ` cat $1` do VAR1=$(ping -ac 2 $i| grep -c error) if [ $VAR1 == "0" ] then echo " valid : $i" else echo " invalid : $i" fi done else echo " please present the file name. example: pong /tmp/a " fi
Kommentit
- Saatat myös haluta lisätä selittäviä sanoja …?
/tmp
, jos isäntä menee alas ' ll päädy täyttämään/tmp
. Se on yleensä huono uutinen …