Bagaimana cara membuat loop di bash yang menunggu tanggapan dari server web?
Ini harus mencetak "." setiap 10 detik atau lebih, dan tunggu hingga server mulai merespons.
Perbarui, kode ini menguji apakah saya mendapat respons yang baik dari server.
jika curl --output / dev / null --silent --head --fail "$ url"; kemudian echo "URL ada: $ url" lain echo "URL tidak ada: $ url" fi
Jawaban:
Menggabungkan pertanyaan dengan jawaban chepner, ini berhasil untuk saya:
sumber
$( )
sebagai gantinya.--head
?--head
tidak akan mengubah apa pun, tetapi Anda dapat melakukannya jika Anda ingin menggunakan beberapa logika pada konten respons (seperti status.html).--head
selalu kembali405
. Harus menghapusnya untuk membuatnya bekerjaSaya ingin membatasi jumlah percobaan maksimum. Berdasarkan jawaban yang diterima Thomas, saya membuat ini:
sumber
--max-time 5
jika karena beberapa alasan waktu tautan yang diminta habishttping bagus untuk ini. sederhana, bersih, tenang.
sementara / sampai dll adalah preferensi pribadi.
sumber
for i in
60; do httping -qc1 http://myhost:myport && echo && break sleep 5 echo -n ${i}.. done
Penggunaan backticks
` `
sudah usang . Gunakan$( )
sebagai gantinya:sumber
Teka-teki yang menarik. Jika Anda tidak memiliki akses atau api async dengan klien Anda, Anda dapat mencoba grep soket tcp Anda seperti ini:
Tapi itu penantian sibuk dengan interval 1 detik. Anda mungkin menginginkan resolusi lebih dari itu. Ini juga global. Jika koneksi lain dibuat ke server itu, hasil Anda tidak valid.
sumber
jika Anda perlu memeriksa apakah server tersedia, penyebab sedang restart atau yang lainnya, Anda dapat mencoba membuat wget ke server dan mengurai respons atau kesalahan, jika Anda mendapatkan 200 atau bahkan 404 server sudah habis, Anda dapat mengubah batas waktu wget dengan --timeout = detik, Anda dapat menyetel batas waktu ke 10 detik dan membuat putaran hingga grep di atas respons memberikan hasil.
saya tidak tahu apakah ini yang Anda cari atau benar-benar Anda memerlukan kode bash.
sumber