GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara melakukan ping di linux sampai host diketahui?

Solusi 1:

Penyederhanaan lebih lanjut dari jawaban Martynas:

until ping -c1 www.google.com >/dev/null 2>&1; do :; done

perhatikan bahwa ping itu sendiri digunakan sebagai tes loop; segera setelah berhasil, loop berakhir. Badan loop kosong, dengan perintah null ": " digunakan untuk mencegah kesalahan sintaksis.

Pembaruan:Saya memikirkan cara untuk membuat Control-C keluar dari loop ping dengan bersih. Ini akan menjalankan loop di latar belakang, menjebak sinyal interupsi (Control-C), dan menghentikan loop latar belakang jika terjadi:

ping_cancelled=false    # Keep track of whether the loop was cancelled, or succeeded
until ping -c1 "$1" >/dev/null 2>&1; do :; done &    # The "&" backgrounds it
trap "kill $!; ping_cancelled=true" SIGINT
wait $!          # Wait for the loop to exit, one way or another
trap - SIGINT    # Remove the trap, now we're done with it
echo "Done pinging, cancelled=$ping_cancelled"

Ini agak berputar-putar, tetapi jika Anda ingin loop dapat dibatalkan, lakukan triknya.

Solusi 2:

Saya tahu pertanyaannya sudah lama ... dan secara khusus menanyakan tentang ping , tetapi saya ingin membagikan solusi saya.

Saya menggunakan ini saat me-reboot host untuk mengetahui kapan saya bisa SSH kembali ke mereka lagi. (Sejak ping akan merespons selama beberapa detik sebelum sshd dimulai.)

until nc -vzw 2 $host 22; do sleep 2; done

Solusi 3:

Anda dapat melakukan perulangan, mengirim satu ping dan bergantung pada status, hentikan perulangan, misalnya (bash):

while true; do ping -c1 www.google.com > /dev/null && break; done

Menempatkan ini di suatu tempat di skrip Anda akan diblokir, hingga www.google.com dapat di-ping.

Solusi 4:

Ping host target sekali. Periksa apakah ping berhasil (nilai pengembalian ping adalah nol). Jika tuan rumah tidak hidup, ping lagi.

Kode berikut dapat disimpan sebagai file dan dipanggil dengan nama host sebagai argumen, atau dihapus dari baris pertama dan terakhir dan digunakan sebagai fungsi dalam skrip yang ada (nama host waitForHost).

Kode tidak mengevaluasi penyebab kegagalan jika ping tidak menghasilkan respons, sehingga berulang selamanya jika host tidak ada. Halaman manual BSD saya mencantumkan arti dari setiap nilai pengembalian, sedangkan linux tidak, jadi saya kira ini mungkin tidak portabel, itu sebabnya saya meninggalkannya.

#!/bin/bash

PING=`which ping`

function waitForHost
{
    if [ -n "$1" ]; 
    then
        waitForHost1 $1;
    else
        echo "waitForHost: Hostname argument expected"
    fi
}

function waitForHost1
{
    reachable=0;
    while [ $reachable -eq 0 ];
    do
    $PING -q -c 1 $1
    if [ "$?" -eq 0 ];
    then
        reachable=1
    fi
    done
    sleep 5
}
waitForHost $1

Solusi 5:

UNREACHEABLE=1;
while [ $UNREACHEABLE -ne "0" ]; 
   do ping -q -c 1 HOST &> /dev/null; UNREACHEABLE=$?; sleep 1;
done

Anda dapat menghapus sleep 1, ini hanya di sini untuk mencegah masalah banjir jika host dapat dijangkau tetapi ping tidak akan keluar dengan kode 0.


Linux
  1. Cara Menginstal dan Menggunakan Perintah Ping di Linux

  2. Bagaimana cara mengulang direktori di Linux?

  3. Bagaimana saya bisa mengaktifkan Ping pada VM Azure Linux

  1. Cara Mengulang Perintah Sampai Berhasil Di Linux

  2. Cara Menonaktifkan Balasan Ping di Linux menggunakan icmp_echo_ignore_all

  3. Linux :Ping semua host di subnet

  1. Cara Menambahkan Host Linux di Server Zabbix untuk Pemantauan

  2. Cara Menggunakan Perintah Ping Linux

  3. QEMU bagaimana cara melakukan ping ke jaringan host?