Vous pouvez utiliser une version modifiée de ce script pour faire ce que vous voulez:
#!/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
Nous sommes "CONNECTED" Exemple
Le débogage étant activé, vous pouvez voir ce que fait le script.
set -x
Exécution avec un nom d'hôte valide pour démontrer l'état "connexion établie".
$ ./watcher.bash
+ downTime=0
++ date +%s
+ lastAccessTime=1402276955
+ '[' true ']'
Le ci - dessus quelques initialise des variables et détermine la dernière fois que nous sommes allés dans la boucle, $lastAccessTime
. Nous essayons maintenant d'envoyer une requête ping à Google.
+ ping -c1 google.com
+ downTime=0
++ date +%s
+ lastAccessTime=1402276955
Nous calculons maintenant tout temps d'arrêt $downTime
, si le ping échoue, sinon, nous remettons $downTime
à zéro et recalculons $lastAccessTime
.
+ sleep 15
Maintenant, nous attendons 15 secondes.
+ '[' 0 -ge 300 ']'
Maintenant, nous vérifions si nous sommes en panne depuis> 5 minutes (300 secondes). Ensuite, nous répétons en parcourant la while
boucle.
+ '[' true ']'
+ ping -c1 google.com
+ downTime=0
++ date +%s
+ lastAccessTime=1402276970
+ sleep 15
....
Tant que nous sommes debout, il ne se passera rien d'autre que de vérifier avec la ping
commande toutes les 15 secondes.
Nous sommes "DÉCONNECTÉS" Exemple
Maintenant , pour simuler une « connexion est en panne » état, nous échangeons le nom d' hôte et nous utilisons pinger un faux, google1234567890.com
. En répétant une exécution de notre script avec le débogage activé, nous voyons maintenant des temps d'arrêt réels calculés.
$ ./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
...
Notez au-dessus de cela $downTime
est égal à 15 secondes jusqu'à présent. Si nous attendons encore un peu, nous verrons ceci:
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=300
+ sleep 15
Nous avons accumulé 300 secondes de temps d'arrêt. Alors maintenant , quand nous vérifions, nous imprimons le message, alert
.
+ '[' 300 -ge 300 ']'
+ echo alert
alert
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=315
+ sleep 15
Cet état se poursuivra jusqu'à ce que la connexion soit rétablie et ping
réussisse à nouveau.
Et le son?
C'est facile. Vous pouvez utiliser une variété d'outils pour ce faire. J'utiliserais quelque chose comme sox
ou mplayer
pour lire un fichier audio tel qu'un fichier .mp3
ou .wav
avec un son approprié que vous souhaitez entendre toutes les 15 secondes, alors que la connexion est coupée.
mplayer someaudio.wav
Remplacez simplement le alert
message ci-dessus par cette ligne pour obtenir un retour audio indiquant que la connexion est interrompue.
Délais de temporisation avec ping
Si vous utilisez ping
de la manière ci-dessus, vous rencontrerez probablement un retard lent où il faut ping
littéralement 10 à 20 secondes pour qu'il échoue lorsque la connexion est coupée. Voir ma réponse à cette Q&R U&L intitulée: Comment rediriger la sortie d'une commande? pour un exemple utilisant l'outil de ligne de commande à la fing
place. Cet outil échouera plus rapidement que le traditionnel ping
.