Bash-ping-scriptbestand voor het controleren van de beschikbaarheid van de host

Ik probeer een bash-script te schrijven in een bestand dat, wanneer het wordt uitgevoerd, een host begint te pingen totdat deze beschikbaar wordt , wanneer de host bereikbaar wordt, voert het een commando uit en stopt het met uitvoeren, ik heb geprobeerd er een te schrijven, maar het script blijft pingen totdat de telling eindigt,

Plus ik moet dat proces op de achtergrond plaatsen, maar als ik het script met het dollar ($) teken dat het nog steeds op de voorgrond draait,

#!/bin/bash ping -c30 -i3 192.168.137.163 if [ $? -eq 0 ] then /root/scripts/test1.sh exit 0 else echo “fail” fi 

Antwoord

Ik zou dit gebruiken, een simpele one-liner:

while ! ping -c1 HOSTNAME &>/dev/null; do echo "Ping Fail - `date`"; done ; echo "Host Found - `date`" ; /root/scripts/test1.sh 

Vervang HOSTNAME met de host die je probeert te pingen.


Ik heb het gedeelte gemist over het op de achtergrond zetten, zet die regel in een shellscript als volgt:

#!/bin/sh while ! ping -c1 $1 &>/dev/null do echo "Ping Fail - `date`" done echo "Host Found - `date`" /root/scripts/test1.sh 

En om het op de achtergrond te gebruiken zou je het als volgt draaien:

nohup ./networktest.sh HOSTNAME > /tmp/networktest.out 2>&1 & 

Vervang opnieuw HOSTNAME met de host die u probeert te pingen. In deze benadering geef je de hostnaam als een argument door aan het shellscript.

Net als een algemene waarschuwing, als je host down blijft, zul je dit script continu op de achtergrond laten pingen totdat je het doodt of de gastheer is gevonden. Dus ik zou dat in gedachten houden wanneer je dit uitvoert. Omdat je systeembronnen zou kunnen opeten als je dit vergeet.

Opmerkingen

  • Tnx voor het antwoord en de waarschuwing, dit is een gevisualiseerde omgeving dus het script zal starten nadat de fysieke servers zijn opgestart, zodat de VM ' s zeker zal starten, maar als ik een VM verwijder, tnx opnieuw
  • In het bijzonder door de fouten elke keer te loggen en alle uitvoer in een bestand op te slaan in /tmp, als de host uitvalt, ' ll uiteindelijk vullen /tmp. Dat is meestal slecht nieuws …

Antwoord

Door de parameters “-c 30” door te geven aan ping, zal het 30 ping proberen en stoppen. Het zal daarna controleren of de opdracht slaagt. Ik denk dat het het beste is om een lus te maken die één ping bevat en te controleren of deze ping lukt. Iets dergelijks:

while true; do ping -c1 google.com if [ $? -eq 0 ] then /root/scripts/test1.sh exit 0 fi done 

Als je nog steeds op de voorgrond draait, en je bedoelt dat het nog steeds bezig is met afdrukken op de terminal, kun je stdin en stdout omleiden naar / dev / null.

Reacties

  • Door de prompt te ontgrendelen zodat ik aan iets anders kan werken, tnx voor hulp

Answer

Een oud bericht, maar als suggestie kun je de optie -w gebruiken om te pingen naar vermijd de lus. Bijvoorbeeld:

ping -w 30 -c 1 host 

zal 30 seconden proberen met één ping per seconde (standaard ping heeft een interval van 1 seconde tussen pings) en wordt afgesloten bij de eerste succesvolle ping .

Als je geen time-out nodig hebt, wacht een eeuwigheid, gebruik gewoon een zeer grote waarde met -w.

Answer

ping -oc 100000 Hostname > /dev/null && /root/scripts/test1.sh 
  • ping -o verlaat de ping nadat het eerste pakket is ontvangen
  • > /dev/null leidt de uitvoer om, zodat je het “niet ziet
  • && zou het volgende commando uitvoeren als het vorige commando succesvol was

Bovendien kunt u elk proces op de achtergrond uitvoeren door het toevoegen van & aan het einde ervan; echo "123" & wordt bijvoorbeeld op de achtergrond uitgevoerd

Antwoord

Hier wordt gewerkt wijziging van uw script.

#!/bin/bash ping -c1 10.1.1.23 > /dev/null if [ $? -eq 0 ] then echo ok exit 0 else echo “fail” fi 

U moet de uitvoer naar /dev/null sturen zodat het niet verschijnt op het scherm.

-c is bedoeld om te tellen. Als je -c30 invoert, ga je naar ping 30 keer voordat uw script naar de volgende regel kan gaan. Ik gebruik -c1 om het script sneller te laten werken.

-i is om seconden te wachten tussen het verzenden van elk pakket. Dus -i3 is om 3 seconden te wachten. Ik verwijder -i om het script sneller te laten werken.

Als laatste, maar niet in de laatste plaats, gebruik indentie zodat je code er goed uitziet en gemakkelijker te lezen is.

Voorbeelduitvoer

user@linux:~$ ./script.sh ok user@linux:~$ user@linux:~$ ./script.sh “fail” user@linux:~$ 

Antwoord

#!/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 

Reacties

  • Misschien wilt u ook om wat verklarende woorden toe te voegen …?

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *