Bash soubor skriptu ping pro kontrolu dostupnosti hostitele

Snažím se napsat bash skript do souboru, který by při spuštění začal pingovat hostitele, dokud nebude k dispozici , když se hostitel stane dosažitelným, spustí příkaz a přestane vykonávat, zkusil jsem napsat jeden, ale skript pokračuje v ping, dokud počet neskončí,

Navíc musím tento proces dát na pozadí, ale pokud spustím skript se znakem dolaru ($) stále běží v popředí,

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

odpověď

Použil bych tuto jednoduchou liniovou linku:

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

Nahradit HOSTNAME s hostitelem, na kterého se pokoušíte ping.


Stýskalo se mi o jeho umístění na pozadí, vložte tento řádek do skriptu takto:

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

A na pozadí byste jej spustili takto:

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

Znovu nahraďte HOSTNAME s hostitelem, na kterého se pokoušíte ping. V tomto přístupu předáváte název hostitele jako argument skriptu shellscript.

Stejně jako obecné varování, pokud váš hostitel zůstane nefunkční, budete mít tento skript neustále ping na pozadí, dokud ho nezabijete nebo hostitel je nalezen. Když to spustíte, pamatuji si to. Protože byste na to mohli zapomenout, pokud na to zapomenete.

Komentáře

  • Tnx pro odpověď a varování, jedná se o vizualizované prostředí takže skript se spustí po spuštění fyzických serverů, takže VM ' s se jistě spustí, ale mějte na paměti, že když odstraním VM, znovu tnx
  • Zejména tak, že pokaždé zaznamenáte chyby a uložíte veškerý výstup do souboru v /tmp, pokud hostitel selže ' ll nakonec vyplňte /tmp. To bývá špatná zpráva …

Odpovědět

Předáním parametrů „-c 30“ do ping, zkusí to 30 ping a zastaví se. Poté zkontroluje, zda je příkaz úspěšný. Myslím, že je nejlepší udělat smyčku, která obsahuje jeden ping a zkontrolovat, zda je tento ping úspěšný. Něco takového:

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

Pokud stále běžíte v popředí, máte na mysli, že stále tiskne na terminálu, můžete přesměrovat stdin a stdout na / dev / null.

Komentáře

  • Odemknutím výzvy, abych mohl pracovat na něčem jiném, požádejte o pomoc tnx

Odpověď

Starý příspěvek, ale jako návrh můžete použít možnost -w na ping vyhnout se smyčce. Například

ping -w 30 -c 1 host 

se pokusí o 30 sekund s jedním pingem za sekundu (výchozí ping má interval 1 s mezi pingy) a ukončí se při prvním úspěšném pingu .

Pokud nepotřebujete vypršení časového limitu, počkejte navždy, stačí použít velmi velkou hodnotu pomocí -w.

Odpověď

ping -oc 100000 Hostname > /dev/null && /root/scripts/test1.sh 
  • ping -o opustí ping po přijetí prvního paketu
  • > /dev/null přesměrovává výstup, takže ho neuvidíte
  • && spustí další příkaz, pokud byl předchozí příkaz úspěšný

Kromě toho můžete spustit jakýkoli proces na pozadí přidání & na konec; například echo "123" & poběží na pozadí

Odpověď

Zde funguje úprava skriptu.

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

Musíte odeslat výstup na /dev/null, aby se na něm nezobrazil obrazovka.

-c je určen pro počet. Pokud zadáte -c30, přejdete na ping 30 krát, než může skript přejít na další řádek. Používám -c1 k rychlejšímu spuštění skriptu.

-i je počkat několik sekund mezi odesláním každého paketu. -i3 je tedy počkat 3 sekundy. Odstraním -i, aby se skript běžel rychleji.

V neposlední řadě použijte indention, aby váš kód vypadal hezky a lépe čitelný.

Ukázkový výstup

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

Odpovědět

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

Komentáře

  • Můžete také chtít přidat vysvětlující slova …?

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *