Anda dapat menggunakan versi modifikasi dari skrip ini untuk melakukan apa yang Anda inginkan:
#!/bin/bash
downTime=0
lastAccessTime=$(date +"%s")
while [ true ]; do
if ! ping -c1 google.com >& /dev/null; then
downTime=$(( $(date +"%s") - $lastAccessTime ))
else
downTime=0
lastAccessTime=$(date +"%s")
fi
sleep 15
if [ $downTime -ge 300 ]; then
echo "alert"
fi
done
Kami "TERHUBUNG" Contoh
Dengan debugging dihidupkan sehingga Anda dapat melihat apa yang dilakukan skrip.
set -x
Berjalan dengan nama host yang valid untuk menunjukkan status "koneksi habis".
$ ./watcher.bash
+ downTime=0
++ date +%s
+ lastAccessTime=1402276955
+ '[' true ']'
Di atas menginisialisasi beberapa variabel dan menentukan kapan terakhir kali kami melewati loop $lastAccessTime
,. Kami sekarang mencoba untuk melakukan ping ke Google.
+ ping -c1 google.com
+ downTime=0
++ date +%s
+ lastAccessTime=1402276955
Kami sekarang menghitung waktu $downTime
henti,, jika ping gagal, jika tidak, kami setel ulang $downTime
ke nol, dan hitung ulang $lastAccessTime
.
+ sleep 15
Sekarang kita tunggu 15 detik.
+ '[' 0 -ge 300 ']'
Sekarang kami memeriksa apakah kami sudah turun> 5 menit (300 detik). Kemudian kami ulangi melalui while
loop.
+ '[' true ']'
+ ping -c1 google.com
+ downTime=0
++ date +%s
+ lastAccessTime=1402276970
+ sleep 15
....
Selama kita bangun, tidak ada yang akan terjadi selain kita memeriksa dengan ping
perintah setiap 15 detik.
Kami adalah "TERCONEKTIF" Contoh
Sekarang untuk mensimulasikan keadaan "koneksi terputus", kami akan menukar nama host yang kami ping dan gunakan yang palsu google1234567890.com
,. Mengulangi skrip kami dengan debugging yang diaktifkan sekarang kami melihat waktu henti aktual dihitung.
$ ./watcher.bash
+ downTime=0
++ date +%s
+ lastAccessTime=1402277506
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=0
+ sleep 15
+ '[' 0 -ge 300 ']'
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=15
+ sleep 15
...
Perhatikan di atas yang $downTime
sama dengan 15 detik sejauh ini. Jika kita menunggu lebih lama, kita akan melihat ini:
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=300
+ sleep 15
Kami mengumpulkan 300 detik waktu henti. Jadi sekarang ketika kami memeriksa, kami mencetak pesan alert
,.
+ '[' 300 -ge 300 ']'
+ echo alert
alert
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=315
+ sleep 15
Keadaan ini akan berlanjut sampai koneksi dipulihkan dan ping
sekali lagi berhasil.
Jadi bagaimana dengan suara?
Itu mudah. Anda dapat menggunakan berbagai alat untuk melakukan ini. Saya akan menggunakan sesuatu seperti sox
atau mplayer
untuk memutar file audio seperti .mp3
atau .wav
file dengan suara yang sesuai yang ingin Anda dengar setiap 15 detik, saat koneksi sedang tidak aktif.
mplayer someaudio.wav
Cukup ganti alert
pesan di atas dengan baris ini untuk mendapatkan umpan balik audio bahwa koneksi sedang down.
Mengatur waktu masalah dengan ping
Jika Anda menggunakan ping
cara di atas, Anda mungkin akan menemukan jeda waktu yang lambat di mana dibutuhkan ping
10-20 detik untuk gagal ketika koneksi sedang tidak aktif. Lihat jawaban saya untuk T&J T&J ini berjudul: Bagaimana cara mengarahkan output dari perintah apa pun? sebagai contoh menggunakan alat baris perintah fing
sebagai gantinya. Alat ini akan gagal lebih cepat daripada yang tradisional ping
.