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
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 aping
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 …?
/tmp
fájlban, ha a gazdagép lefelé megy. végül kitölti/tmp
. Ez általában rossz hír …