Created
May 2, 2013 13:05
-
-
Save lrq3000/5502039 to your computer and use it in GitHub Desktop.
A simple bash script to watch packets loss using ping on Unix/Linux
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Packets Loss Watch | |
# Simple SHELL script for Linux and UNIX system monitoring with | |
# ping command | |
# | |
# Copyright (c) 2006 nixCraft project <http://www.cyberciti.biz/fb/> | |
# Copyleft 2013 Stephen Larroque | |
# This script is licensed under GNU GPL version 2.0 or above | |
# | |
# This script was inspired by a nixCraft script http://www.cyberciti.biz/tips/simple-linux-and-unix-system-monitoring-with-ping-command-and-scripts.html | |
# | |
# For more complex needs, take a look at: | |
# - SmokePing: http://oss.oetiker.ch/smokeping/ | |
# - DropWatch: http://humblec.com/dropwatch-to-see-where-the-packets-are-dropped-in-kernel-stack/ | |
# - sjitter: http://www.nicolargo.com/dev/sjitter/ | |
# - iperf: http://iperf.fr/ | |
# ------------------------------------------------------------------------- | |
#=== PARAMETERS change them here | |
# add ip / hostname separated by while space | |
HOSTS="www.google.com" | |
# no ping request | |
COUNT=20 | |
# email report when | |
#SUBJECT="Ping failed" | |
#EMAILID="[email protected]" | |
#=== Local vars (do not change them) | |
# Cron-friendly: Automaticaly change directory to the current one | |
cd $(dirname "$0") | |
# Current script filename | |
SCRIPTNAME=$(basename "$0") | |
# Current date and time | |
today=$(date '+%Y-%m-%d') | |
currtime=$(date '+%H:%M:%S') | |
#=== Help message | |
if [[ "$@" =~ "--help" ]]; then | |
echo "Usage: bash $SCRIPTNAME | |
Check the rate of packets loss and output the result in a file named plwatch.txt in the same directory as this script. | |
Note: this script is cron-friendly, so you can add it to a cron job to regularly check your packets loss. | |
" | |
exit | |
fi | |
#=== Main script | |
for myHost in $HOSTS | |
do | |
msg=$(ping -c $COUNT $myHost | grep 'loss') | |
echo "[$today $currtime] ($myHost $COUNT) $msg" >> plwatch.txt | |
#count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }') | |
#if [ $count -eq 0 ]; then | |
# 100% failed | |
# echo "Host : $myHost is down (ping failed) at $(date)" | mail -s "$SUBJECT" $EMAILID | |
#fi | |
done |
A cleaner version would be like below
``#!/bin/bash
packet=$(ping -c 3 192.168.0.1 | grep "packet loss" | awk -F ',' '{print $3}' | awk '{print $1}')
echo "$packet" >> watch.txt
simple and easy. Thank You.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
A cleaner version would be like below
``#!/bin/bash
packet=$(ping -c 3 192.168.0.1 | grep "packet loss" | awk -F ',' '{print $3}' | awk '{print $1}')
echo "$packet" >> watch.txt