Saya mencoba mencari cara lain untuk melihat apakah host yang diberikan sudah habis, hanya menggunakan perintah shell (terutama bash). Idealnya, ini dapat bekerja dengan nama host dan alamat IP. Saat ini satu-satunya cara asli yang saya tahu adalah ping, mungkin diintegrasikan ke dalam skrip seperti yang dijelaskan di sini. Ada ide lain?
sumber
answered
jawabannya. OP secara khusus memintamore ways to see if a given host is up
, selain denganping
, yang tidak disediakan jawaban ini."Because of the load it can impose on the network, it is unwise to use ping during normal operations or from automated scripts."
Ping hebat untuk mendapatkan respons cepat tentang apakah host terhubung ke jaringan, tetapi sering tidak memberi tahu Anda apakah host masih hidup atau tidak, atau apakah masih beroperasi seperti yang diharapkan. Ini karena respons ping biasanya ditangani oleh kernel, jadi meskipun setiap aplikasi pada sistem mengalami crash (mis. Karena kegagalan disk atau kehabisan memori), Anda akan sering masih mendapatkan respons ping dan mungkin menganggap mesin beroperasi secara normal ketika situasinya berlawanan.
Memeriksa layanan
Biasanya Anda tidak terlalu peduli apakah host masih online atau tidak, yang benar-benar Anda pedulikan adalah apakah mesin masih melakukan beberapa tugas. Jadi, jika Anda dapat memeriksa tugas secara langsung, maka Anda akan tahu bahwa tuan rumah sudah selesai dan tugas itu masih berjalan.
Untuk host jarak jauh yang menjalankan server web misalnya, Anda dapat melakukan sesuatu seperti ini:
Jika menjalankan SSH dan Anda memiliki kunci yang diatur untuk login tanpa kata sandi, maka Anda memiliki beberapa opsi lagi, misalnya:
Ini berfungsi dengan SSH'ing ke host dan menjalankan
true
perintah dan kemudian menutup koneksi. Thessh
perintah saja akan kembali sukses jika perintah yang bisa berjalan dengan sukses.Tes jarak jauh melalui SSH
Anda dapat memperluas ini untuk memeriksa proses tertentu, seperti memastikan bahwa
mysqld
itu berjalan pada mesin:Tentu saja dalam hal ini Anda akan lebih baik menjalankan sesuatu seperti
monit
pada target untuk memastikan layanan tetap berjalan, tetapi ini berguna dalam skrip di mana Anda hanya ingin melakukan beberapa tugas pada mesin A selama mesin B siap untuk itu .Ini bisa seperti memeriksa bahwa mesin target memiliki sistem file tertentu yang dipasang sebelum melakukan
rsync
itu, sehingga Anda tidak sengaja mengisi disk utama jika sistem file sekunder tidak dipasang karena alasan tertentu. Misalnya ini akan memastikan bahwa/mnt/raid
sudah terpasang pada mesin target sebelum melanjutkan.Layanan tanpa klien
Kadang-kadang tidak ada cara mudah untuk terhubung ke layanan dan Anda hanya ingin melihat apakah ia menerima koneksi TCP yang masuk, tetapi ketika Anda
telnet
ke target pada port yang bersangkutan hanya duduk di sana dan tidak memutuskan Anda, yang berarti melakukan itu dalam skrip akan menyebabkannya hang.Meskipun tidak begitu bersih, Anda masih bisa melakukan ini dengan bantuan program
timeout
dannetcat
. Misalnya, ini memeriksa untuk melihat apakah mesin menerima koneksi SMB / CIFS pada port TCP 445, sehingga Anda dapat melihat apakah mesin itu menjalankan berbagi file Windows bahkan jika Anda tidak memiliki kata sandi untuk login, atau alat klien CIFS tidak tersedia t diinstal:sumber