Bash-ping-komentotiedosto isännän saatavuuden tarkistamiseksi

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

  • Tnx vastaukselle ja varoitukselle, tämä on visualisoitu ympäristö Joten komentosarja käynnistyy fyysisen palvelimen käynnistymisen jälkeen, joten virtuaalikone ' käynnistyy varmasti, mutta pitää mielessä, jos poistan virtuaalikoneen, tnx uudelleen
  • Erityisesti kirjautumalla epäonnistumiset joka kerta ja tallentamalla kaikki lähdöt tiedostoon /tmp, jos isäntä menee alas ' ll päädy täyttämään /tmp. Se on yleensä huono uutinen …

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 poistuu ping 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 …?

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *