Saya merasa bahwa saya kehilangan yang jelas, tetapi belum berhasil man [curl|wget]
atau google ("http" membuat istilah pencarian yang buruk). Saya mencari perbaikan cepat & kotor ke salah satu server web kami yang sering gagal, mengembalikan kode status 500 dengan pesan kesalahan. Setelah ini terjadi, itu harus dimulai ulang.
Karena root root tampaknya sulit ditemukan, kami bertujuan untuk memperbaiki dengan cepat, berharap cukup untuk menjembatani waktu hingga kami benar-benar dapat memperbaikinya (layanan tidak memerlukan ketersediaan tinggi)
Solusi yang diusulkan adalah membuat pekerjaan cron yang berjalan setiap 5 menit, memeriksa http: // localhost: 8080 / . Jika ini kembali dengan kode status 500, server web akan dimulai kembali. Server akan restart dalam waktu kurang dari satu menit, jadi tidak perlu memeriksa untuk me-restart sudah berjalan.
Server yang dimaksud adalah instalasi minimal ubuntu 8.04 dengan hanya cukup paket yang diinstal untuk menjalankan apa yang saat ini dibutuhkan. Tidak ada persyaratan sulit untuk melakukan tugas di bash, tapi saya ingin menjalankannya dalam lingkungan yang minimal tanpa menginstal lebih banyak juru bahasa.
(Saya cukup akrab dengan skrip bahwa perintah / opsi untuk menetapkan kode status http ke variabel lingkungan akan cukup - ini adalah apa yang saya cari dan tidak dapat temukan.)
sumber
response=$(curl --write-out \\n%{http_code} --silent --output - servername)
- baris terakhir dalam hasilnya adalah kode respons.--insecure
juga.bekerja. Jika tidak, Anda harus menekan kembali untuk melihat kode itu sendiri.
sumber
Saya perlu melakukan demo sesuatu dengan cepat hari ini dan menghasilkan ini. Kupikir aku akan meletakkannya di sini jika seseorang membutuhkan sesuatu yang mirip dengan permintaan OP.
Ini akan mengirimkan peringatan email pada setiap perubahan negara bagian dari 200, jadi itu bodoh dan berpotensi rakus. Untuk meningkatkan ini, saya akan melihat perulangan melalui beberapa kode status dan melakukan tindakan berbeda tergantung pada hasilnya.
sumber
Meskipun respons yang diterima adalah jawaban yang baik, itu mengabaikan skenario kegagalan.
curl
akan kembali000
jika ada kesalahan dalam permintaan atau ada kegagalan koneksi.Catatan: ini sedikit melampaui
500
pemeriksaan status yang diminta untuk juga mengonfirmasi bahwacurl
bahkan dapat terhubung ke server (yaitu mengembalikan000
).Buat fungsi dari itu:
Tes mendapatkan
500
:Tes mendapatkan kesalahan / kegagalan koneksi (yaitu
000
):Tes tidak mendapatkan
500
:sumber
Dengan netcat dan awk Anda dapat menangani respons server secara manual:
sumber
Untuk mengikuti pengalihan 3XX dan mencetak kode respons untuk semua permintaan:
sumber
grep
akan menangkap semua baris dengan "HTTP" di dalamnya. Mungkingrep -m 1 HTTP
hanya untuk merebut pertandingan pertama, jika itu maksudnya, atau mungkin malah mengirim ke Awk untuk menguraikan kode hasil saja.ini dapat membantu mengevaluasi status http
sumber
head -n 1 | awk '{stuff}'
adalah sedikit antipattern,awk 'NR==1 {stuff}'
melakukan hal yang sama dalam satu proses, Awk murni.Variasi lain:
sumber
Inilah skrip yang bertele-tele - namun mudah dipahami -, terinspirasi oleh solusi nicerobot , yang hanya meminta header respons dan menghindari penggunaan IFS seperti yang disarankan di sini . Ini menampilkan pesan bouncing ketika menemukan respons> = 400. Gema ini dapat diganti dengan skrip bouncing.
sumber
saya tidak suka jawaban di sini yang mencampur data dengan status. menemukan ini: Anda menambahkan flag -f untuk membuat curl gagal dan mengambil kode status kesalahan dari status standar var: $?
/unix/204762/return-code-for-curl-used-in-a-command-substitusi
Saya tidak tahu apakah itu sempurna untuk setiap skenario di sini, tetapi tampaknya sesuai dengan kebutuhan saya dan saya pikir itu jauh lebih mudah untuk dikerjakan
sumber
Berikut ini adalah implementasi saya, yang sedikit lebih bertele-tele daripada beberapa jawaban sebelumnya
sumber
Untuk menambahkan komentar @DennisWilliamson di atas:
Anda kemudian dapat mengurai kode respons dari respons menggunakan sesuatu seperti berikut ini, di mana X dapat menandakan regex untuk menandai akhir respons (menggunakan contoh json di sini)
Lihat Penghapusan Substring: http://tldp.org/LDP/abs/html/string-manipulation.html
sumber
echo
untuk mendapatkan nilai akhir? Hanyacode=${response##*\}}
lebih sederhana dan menghindari sejumlah perangkap umum. Juga, itu adalah pola gumpalan, bukan ekspresi reguler yang tepat.