Fișier script script ping pentru verificarea disponibilității gazdei

Încerc să scriu un script bash într-un fișier care, atunci când rulează, începe să pingă o gazdă până când devine disponibil , când gazda devine accesibilă, execută o comandă și se oprește din executare, am încercat să scriu una, dar scriptul continuă să pingă până când contorul se termină,

În plus, trebuie să pun acest proces în fundal, dar dacă rulez scriptul cu semnul dolar ($) rulează încă în prim-plan,

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

Răspuns

Aș folosi acest lucru, un simplu liner:

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

Înlocuiți HOSTNAME cu gazda pe care încercați să faceți ping.


Mi-a fost dor de partea de a-l pune în fundal, a pus acea linie într-un shellscript astfel:

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

Și pentru fundal l-ați rula astfel:

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

Înlocuiți din nou HOSTNAME cu gazda pe care încercați să faceți ping. În această abordare, treceți numele gazdei ca argument către shellscript.

La fel ca un avertisment general, dacă gazda dvs. rămâne oprită, veți avea acest script ping continuu în fundal până când îl veți ucide sau gazda este găsită. Așadar, aș ține cont de asta atunci când rulați acest lucru. Deoarece puteți ajunge să mâncați resurse de sistem dacă uitați de acest lucru.

Comentarii

  • Tnx pentru răspuns și avertisment, acesta este un mediu vizualizat deci scriptul va începe după pornirea serverelor fizice, astfel încât VM ' s vor începe cu siguranță, dar va ține cont dacă șterg o VM, tnx din nou
  • În special prin înregistrarea de fiecare dată a erorilor și stocarea tuturor rezultatelor într-un fișier în /tmp, dacă gazda coboară ' ll ajunge să umple /tmp. Aceasta tinde să fie o veste proastă …

Răspuns

Prin trecerea parametrilor „-c 30” la ping, va încerca 30 de ping și se va opri. Se va verifica după ce comanda reușește. Cred că este mai bine să faceți o buclă care conține un ping și să verificați dacă acest ping reușește. Ceva de genul acesta:

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

Dacă rulați încă în prim-plan, vrei să spui că încă se tipărește pe terminal, poți redirecționa stdin și stdout către / dev / null.

Comentarii

  • Deblocând solicitarea pentru a putea lucra la altceva, tnx pentru ajutor

Răspuns

O postare veche, dar ca sugestie puteți utiliza opțiunea -w pe ping la evita bucla. De exemplu,

ping -w 30 -c 1 host 

va încerca timp de 30 de secunde cu un ping pe secundă (ping-ul implicit are un interval de 1 secundă între ping) și va ieși din primul ping de succes .

Dacă nu aveți nevoie de un timeout, adică aștept veșnic, folosiți doar o valoare foarte mare cu -w.

Răspuns

ping -oc 100000 Hostname > /dev/null && /root/scripts/test1.sh 
  • ping -o iese din ping după primirea primului pachet
  • > /dev/null redirecționează ieșirea, deci nu o veți vedea
  • && ar rula următoarea comandă, dacă comanda anterioară a avut succes

În plus, puteți rula orice proces în fundal prin adăugarea & la sfârșitul acestuia; de exemplu, echo "123" & va rula în fundal

Răspuns

Aici funcționează modificarea scriptului dvs.

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

Trebuie să trimiteți rezultatul către /dev/null, astfel încât să nu apară pe ecranul.

-c este destinat numărării. Dacă puneți -c30, veți merge la ping 30 de câteva ori înainte ca scriptul dvs. să poată trece la rândul următor. Folosesc -c1 pentru a face scriptul să ruleze mai repede.

-i este să aștept câteva secunde între trimiterea fiecărui pachet. Deci, -i3 trebuie să aștepte 3 secunde. Îndepărt -i pentru ca scriptul să ruleze mai repede.

Nu în ultimul rând, folosiți indentarea, astfel încât codul dvs. să arate frumos și mai ușor de citit.

Exemplu de ieșire

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

Răspuns

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

Comentarii

  • De asemenea, ați putea dori pentru a adăuga câteva cuvinte explicative …?

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *