Bash ping szkriptfájl a gazdagép elérhetőségének ellenőrzéséhez

Olyan fájlba próbálok írni egy bash parancsfájlt, amely futtatásakor elkezdené pingelni a gazdagépet, amíg elérhetővé válik , amikor a gazdagép elérhetővé válik, futtat egy parancsot, és leállítja a végrehajtást, megpróbáltam írni egyet, de a szkript addig folytatja a pingelést, amíg a számlálás véget nem ér,

Ráadásul ezt a folyamatot háttérbe kell helyeznem, de ha a szkript a dollár ($) aláírással továbbra is az előtérben fut,

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

Válasz

Ezt használnám, egy egyszerű egysoros:

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

Cserélje le a HOSTNAME azzal a gazdagéppel, amelyet megpróbál pingelni.


Hiányzott a háttérbe helyezésről szóló rész, ezt a sort írtam ilyen kagylóba:

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

És háttérképként a következő módon futtatná:

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

Ismét cserélje le a HOSTNAME azzal a gazdagéppel, amelyet pingelni próbálsz. Ebben a megközelítésben a gazdagépnevet argumentumként adja át a shellscript-nek.

Csak általános figyelmeztetésként, ha a gazdagép nem működik, akkor ezt a szkriptet folyamatosan pingelni fogja a háttérben, amíg meg nem öli vagy a gazdát megtalálják. Tehát ezt szem előtt tartanám, amikor ezt futtatja. Mivel elfelejtheti a rendszer erőforrásait, ha erről megfeledkezik.

Megjegyzések

  • Tnx a válaszra és a figyelmeztetésre, ez egy vizualizált környezet így a szkript a fizikai szerverek indítása után indul, így a virtuális gép ' s minden bizonnyal elindulnak, de szem előtt tartják, ha törölök egy virtuális gépet, akkor tnx újra
  • Különösen azáltal, hogy minden alkalommal naplózza a hibákat, és az összes kimenetet egy fájlban tárolja a /tmp fájlban, ha a gazdagép lefelé megy. végül kitölti /tmp. Ez általában rossz hír …

Válasz

A “-c 30” paraméterek átadásával ping, megpróbál 30 pinget és stopot. Utána ellenőrzi, hogy a parancs sikeres-e. Szerintem a legjobb, ha egy ciklust készítünk, amely egy pinget tartalmaz, és ellenőrizzük, hogy ez a ping sikeres-e. Valami ilyesmi:

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

Ha továbbra is az előtérben futva azt jelenti, hogy még mindig a terminálra nyomtat, akkor átirányíthatja a stdin-t és az stdout-ot a / dev fájlba / null.

Megjegyzések

  • A felszólítás feloldásával, hogy mással tudjak dolgozni, tnx segítségért

Válasz

Régi bejegyzés, de javaslatként a -w beállítást használhatja a ping kerülje a hurkot. Például

ping -w 30 -c 1 host 

30 másodpercig próbálkozik, egy másodpercenkénti pingeléssel (az alapértelmezett pingnek 1 másodperces intervalluma van a pingek között), és kilép az első sikeres pingből .

Ha nincs szüksége időkorlátra, vagyis várjon örökké, csak nagyon nagy értéket használjon a következővel: -w.

Válasz

ping -oc 100000 Hostname > /dev/null && /root/scripts/test1.sh 
  • ping -o kilép a ping az első csomag beérkezése után
  • > /dev/null átirányítja a kimenetet, így nem fogja látni
  • && futtatná a következő parancsot, ha az előző parancs sikeres lenne

Ezenkívül bármilyen folyamatot futtathat a háttérben: & hozzáadása a végéhez; például a echo "123" & a háttérben fog futni

Válasz

Itt működik a szkript módosítása.

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

A kimenetet a következő címre kell elküldenie: /dev/null, így nem fog megjelenni a képernyő.

-c a számlálásra szolgál. Ha a -c30 elemet beírja, akkor 30 alkalommal, mielőtt a szkript a következő sorra léphet. A szkript gyorsabb futtatásához a -c1 -t használom.

-i az, hogy másodperceket kell várni az egyes csomagok elküldése között. Tehát -i3 várjon 3 másodpercet. A szkript gyorsabb futtatása érdekében eltávolítom a -i alkalmazást.

Végül, de nem utolsósorban használjon behúzást, hogy a kódja szépnek és könnyebben olvashatónak tűnjön.

Minta kimenet

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

Válasz

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

Megjegyzések

  • Érdemes is néhány magyarázó szót hozzáadni …?

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük