การแจ้งเตือนการเชื่อมต่ออินเทอร์เน็ตลดลง


9

มีซอฟต์แวร์อะไรบ้างที่จะเล่นการแจ้งเตือน (ลำโพง PC) เมื่อไม่มีการเชื่อมต่ออินเทอร์เน็ตเป็นเวลา 5 นาที?

สวิตช์ / เราเตอร์ของฉันดูเหมือนจะตัดการเชื่อมต่อทุกสองสามวันและฉันต้องการรีเซ็ตเมื่อมันเกิดขึ้น

PC          -- TP-Link switch/router -- FO
192.168.x.1 -- 192.168.x.2 / x.y.z.a -- a.b.c.d

3
ไม่ต้องชี้ให้เห็นชัดเจน แต่คุณกำลังแก้ปัญหาวงเวียนอย่างมากต่อปัญหาสวิตช์ / เราเตอร์ผิดพลาด
Michael Mrozek

คำตอบ:


7

คุณสามารถใช้สคริปต์นี้เพื่อแก้ไขสิ่งที่คุณต้องการ:

#!/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

เราเป็นตัวอย่าง "CONNECTED"

เมื่อเปิดการดีบักแล้วคุณจะเห็นว่าสคริปต์ทำอะไรอยู่

set -x

การรันด้วยชื่อโฮสต์ที่ถูกต้องเพื่อแสดงสถานะ "การเชื่อมต่อ is up"

$ ./watcher.bash
+ downTime=0
++ date +%s
+ lastAccessTime=1402276955
+ '[' true ']'

ข้างต้นเริ่มต้นตัวแปรสองสามตัวและกำหนดครั้งสุดท้ายที่เราผ่านลูป, $lastAccessTime. ตอนนี้เราพยายาม ping Google

+ ping -c1 google.com
+ downTime=0
++ date +%s
+ lastAccessTime=1402276955

ตอนนี้เราคำนวณเวลาลงใด ๆ$downTimeถ้า ping ล้มเหลวมิฉะนั้นเราตั้งค่าให้เป็นศูนย์และคำนวณ$downTime$lastAccessTime

+ sleep 15

ตอนนี้เรารอ 15 วินาที

+ '[' 0 -ge 300 ']'

ตอนนี้เราตรวจสอบว่าเราลงไปแล้ว> 5 นาที (300 วินาที) จากนั้นเราทำซ้ำจะผ่านwhileวง

+ '[' true ']'
+ ping -c1 google.com
+ downTime=0
++ date +%s
+ lastAccessTime=1402276970
+ sleep 15
....

ตราบใดที่เรายังคงอยู่จะไม่มีอะไรเกิดขึ้นนอกจากที่เราตรวจสอบกับpingคำสั่งทุก ๆ 15 วินาที

เราเป็นตัวอย่าง "ตัดการเชื่อมต่อ"

ตอนนี้เพื่อจำลอง "การเชื่อมต่อเป็นลง" google1234567890.comรัฐเราจะสลับออกชื่อโฮสต์ที่เรากำลังกระตุกและใช้ปลอมหนึ่ง ทำซ้ำการเรียกใช้สคริปต์ของเราด้วยการเปิดใช้งานการดีบักตอนนี้เราเห็นการคำนวณเวลาหยุดทำงานจริง

$ ./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
...

สังเกตเห็นข้างต้นที่$downTimeมีค่าเท่ากับ 15 วินาทีจนถึง หากเรารออีกนานเราจะเห็นสิ่งนี้:

+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=300
+ sleep 15

เรามีเวลาหยุดทำงาน 300 วินาที alertดังนั้นตอนนี้เมื่อเราตรวจสอบเราพิมพ์ข้อความ

+ '[' 300 -ge 300 ']'
+ echo alert
alert
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=315
+ sleep 15

สถานะนี้จะดำเนินต่อไปจนกว่าการเชื่อมต่อจะถูกกู้คืนและpingจะสำเร็จอีกครั้ง

แล้วเสียงล่ะ

ง่ายมาก คุณสามารถใช้เครื่องมือที่หลากหลายเพื่อทำสิ่งนี้ ฉันจะใช้สิ่งที่ชอบsoxหรือmplayerเล่นไฟล์เสียงเช่น.mp3หรือ.wavไฟล์ที่มีเสียงที่เหมาะสมที่คุณต้องการฟังทุก ๆ 15 วินาทีในขณะที่การเชื่อมต่อไม่ทำงาน

mplayer someaudio.wav

เพียงแค่แทนที่alertข้อความด้านบนด้วยบรรทัดนี้เพื่อรับเสียงตอบรับที่การเชื่อมต่อไม่ทำงาน

หมดเวลาปัญหากับ ping

หากคุณใช้pingในลักษณะข้างต้นคุณอาจพบว่ามีความล่าช้าช้าซึ่งใช้เวลาping10-20 วินาทีในการล้มเหลวเมื่อการเชื่อมต่อหยุดทำงาน ดูคำตอบของฉันสำหรับคำถามและคำตอบเกี่ยวกับ U&L นี้: จะเปลี่ยนทิศทางผลลัพธ์ของคำสั่งใดได้อย่างไร สำหรับตัวอย่างโดยใช้เครื่องมือบรรทัดคำสั่งfingแทน pingเครื่องมือนี้จะล้มเหลวได้รวดเร็วยิ่งขึ้นกว่าเดิม


แต่ฉันใช้beepคำสั่งปลอดภัยหรือไม่ที่chown /dev/tty0จะใช้โดยไม่ต้องทำ sudo
Kokizzu

1
@Kokizzu - /dev/tty0ไม่คุณไม่ควรจะมีการเปลี่ยนแปลงในการเป็นเจ้าของ
slm

1
ไชโยsox! ด้านขวาของ SLM เกี่ยวกับการออกสิทธิ์บน - @Kokizzu /dev/tty0อุปกรณ์เพียงอย่างเดียว แต่คุณอาจจะได้รับการหลอกขั้ว /dev/pts/[num]อุปกรณ์ - ชนิดเดียวกันของอุปกรณ์ตัวที่xtermใช้สำหรับแต่ละหน้าต่างเช่น - กับสิ่งที่ต้องการscreenหรือหรือแม้กระทั่งtmux sshสิ่งเหล่านี้คุณสามารถควบคุมได้อย่างปลอดภัยมากขึ้นเนื่องจากเป็นเพียงอุปกรณ์ทาสต่ออุปกรณ์หลัก/dev/ptmxอยู่แล้วและจะไม่ทำให้เกิดปัญหาเช่นเดียวกับ/bin/loginกระบวนการที่ผู้ใช้เป็นเจ้าของซึ่งอาจเป็นสิ่งที่อาจเกิดขึ้นในกรณีอื่น ๆ
mikeserv

aplay alert.wavเป็นวิธีมาตรฐานในการเล่นเสียงเนื่องจากเป็นส่วนหนึ่งของระบบ ALSA และมีการ prebundled ใน distros ส่วนใหญ่
เรย์ฟอสส์

4

หากคุณใช้ Linux คุณสามารถใช้ ping ภายในสคริปต์เพื่อgoogle.com:

counter=0
while [ true ]
do
ping -c 1 google.com > /dev/null 2>&1
if [ $? -ne 0 ] 
then
    let "counter +=1"
else
    let "counter = 0"
fi
if [ $counter -eq 300 ] # we assume that one ping need one second (300 is 5 minutes)
then
   echo "alert"
fi
done

3
นี้จะทำงาน แต่คุณอาจต้องการพิจารณาใช้แทนfing cmd อาจใช้เวลาสักเล็กน้อยเพื่อล้มเหลวเมื่อไม่สำเร็จ คำสั่งบน otherhand จะล้มเหลวภายใน 1 วินาที ดูคำถามที่ถามบ่อย A ของฉันเพิ่มเติม: จะเปลี่ยนเส้นทางผลลัพธ์ของคำสั่งใด ๆ . ฉันแสดงทั้งใช้และ pingpingfingpingfing
slm

@slm ขอบคุณสำหรับการแก้ไขของคุณฉันสับสนว่าจะทำให้ ping คงอยู่ได้เพียงวินาทีเดียวเท่านั้น
Nidal

ดูเหมือนว่าสิ่งนี้จะดำเนินการ ping ไม่ จำกัด จำนวนครั้งต่อวินาทีหากตอบสนองทันทีเช่นเมื่ออีเธอร์เน็ตสูญเสียพลังงาน sleep 1ก็เพียงพอที่จะป้องกันสิ่งนี้
เรย์ฟอสส์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.