Benutzer-Werkzeuge

Webseiten-Werkzeuge


run_speedtest.sh

Das Script run_speedtest.sh erstellt eine Auswertung der Downloadraten mit Hilfe des Internetdienstes speedtest.tele2.net. Siehe dazu auch unter http://speedtest.tele2.net bzw. ftp://speedtest.tele2.net

Es werden vordefinierte Dateien mit einer jeweils zu wählenden Größe von 1MB, 10MB ,100MB, 1GB, 10GB, 50GB, 100GB oder 1000GB mit wget heruntergeladen. Diese Dateien werden nicht im Dateisystem abgelegt, sondern sofort beim Eintreffen auf dem lokalen PC nach /dev/null umgeleitet - also verworfen.

wget zeigt am Ende eines jeden Downloads die durchschnittliche Transferrate in MByte pro Sekunde an. Als letzte Spalte werden die vorgenannten MByte/s in MBit/s umgerechnet und hinzugefügt. Diese Werte werden in das Logfile mit dem Namen speedtest_<JJJJ-MM-TT>_summary.log geschrieben. Es wird ein Logfile pro Tag angelegt, wenn dieses Script als Cronjob hinterlegt ist und der Rechner eingeschaltet ist.

Cronjob: Scriptlauf alle 30 Minuten

*/30 * * * * /home/<username>/<script_dir>/run_speedtest.sh -s 1GB

Beispielausgabe in Logfile speedtest_<JJJJ-MM-TT>_summary.log:

2021-01-29 11:00:16 67,7 MB/s 541,8 MBit/s
2021-01-29 11:30:14 76,0 MB/s 608,0 MBit/s

Das Logfile speedtest_<JJJJ-MM-TT>_detail.log enthält die gesamte Ausgabe von wget während des Downloads.


Scriptlisting

run_speedtest.sh
#!/bin/bash
#
# run_speedtest.sh
#
# Script erstellt eine Auswertung der Downloadraten mit Hilfe des Internetdienstes speedtest.tele2.net
# Siehe dazu auch unter http://speedtest.tele2.net bzw. ftp://speedtest.tele2.net
#
# Es werden vordefinierte Dateien mit einer jeweils zu wählenden Größe von 1MB, 10MB ,100MB, 1GB,
# 10GB, 50GB, 100GB oder 1000GB mit wget heruntergeladen. Diese Dateien werden nicht im Dateisystem
# abgelegt, sondern sofort beim Eintreffen auf dem lokalen PC nach /dev/null umgeleitet - also 
# verworfen.
# wget zeigt am Ende eines jeden Downloads die durchschnittliche Transferrate in MByte pro Sekunde an.
# Diese Werte werden in das Logfile mit dem Namen speedtest_<JJJJ-MM-TT>_summary.log geschrieben.
# Es wird ein Logfile pro Tag angelegt, wenn dieses Script als Cronjob hinterlegt ist und der Rechner
# eingeschaltet ist.
# 
# Cronjob: Scriptlauf alle 30 Minuten
# */30 * * * * /home/<username>/<script_dir>/run_speedtest.sh -s 1GB
#
# Beispielausgabe in Logfile speedtest_<JJJJ-MM-TT>_summary.log:
# 2021-01-29 11:00:16 67,7 MB/s 541,6 MBit/s
# 2021-01-29 11:30:14 76,0 MB/s 608,0 MBit/s
#
# Das Logfile speedtest_<JJJJ-MM-TT>_detail.log enthält die gesamte Ausgabe von wget während des Downloads.
#
#
##########################
#  Variablenzuweisungen
##########################
 
FILE_SIZE="100MB"
LOCATION_URL="http://speedtest.tele2.net"
LOGFILE_PATH="$HOME/speedtest"
LOGFILE_TIMESTAMP=$(date '+%Y-%m-%d')
LOGFILE_DETAIL="speedtest_"$LOGFILE_TIMESTAMP"_detail.log"
LOGFILE_SUMMARY="speedtest_"$LOGFILE_TIMESTAMP"_summary.log"
ERRORMESSAGE="Achtung Fehler beim Aufruf des Scriptes. Eine kurz Hilfe erhält man mit Aufruf $0 -h"
 
 
################
#  Funktionen
################
 
# Funktion zur Anzeige der Hilfe
usage()
{
	echo ""
	echo "Syntax:      $0 -h | -s <1MB|10MB|100MB|1GB|10GB|50GB|100GB|1000GB> | -d <1MB|10MB|100MB|1GB|10GB|50GB|100GB|1000GB>"
	echo ""
	echo "Beispiel 1:  $0 -s 1GB  ... Speedtest mit download einer 1 GByte großen Datei"
	echo "Beispiel 2:  $0 -d 10MB ... Debugging-Ausgabe ohne Aktion"
	echo ""
	echo " -h (help)       diese Hilfeseite"
	echo " -s (size)       Speedtest mit anzugebender Größe der Downloaddatei"
	echo " -d (debug)      Ausgabe der Variablenwerte, ohne wirkliche Aktion"
	echo ""
	exit 3
}
 
 
# Funktion zum Download und dem Anlegen der Logdateien
do_run()
{
	wget -O /dev/null $LOCATION_URL/$FILE_SIZE.zip 2>> $LOGFILE_PATH/$LOGFILE_DETAIL
	echo "---" >> $LOGFILE_PATH/$LOGFILE_DETAIL
	egrep "\- »/dev/null«" $LOGFILE_PATH/$LOGFILE_DETAIL | sed 's/) - .*//g' | sed 's/(//g' | sed 's/,/./g' | gawk '{printf("%s %s %.1f %s %.1f %s\n", $1, $2, $3, $4, $3*8, "MBit/s")}' > $LOGFILE_PATH/$LOGFILE_SUMMARY
}
 
 
# Funktion für das Debugging
do_debug()
{
	echo ""
	echo "-------------------------------------------------------- [Beginn Debugging] --------------------------------------------------------"
	echo "FILE_SIZE              "$FILE_SIZE
	echo "LOCATION_URL           "$LOCATION_URL
	echo "LOGFILE_PATH           "$LOGFILE_PATH
	echo "LOGFILE_TIMESTAMP      "$LOGFILE_TIMESTAMP
	echo "LOGFILE_DETAIL         "$LOGFILE_DETAIL
	echo "LOGFILE_SUMMARY        "$LOGFILE_SUMMARY
	echo ""
	echo " wget -O /dev/null $LOCATION_URL/$FILE_SIZE.zip 2>> $LOGFILE_PATH/$LOGFILE_DETAIL"
	echo " echo "---" >> $LOGFILE_PATH/$LOGFILE_DETAIL"
	echo " egrep "\- »/dev/null«" $LOGFILE_PATH/$LOGFILE_DETAIL | sed 's/) - .*//g' | sed 's/(//g' > $LOGFILE_PATH/$LOGFILE_SUMMARY"
	echo "-------------------------------------------------------- [Ende Debugging] ----------------------------------------------------------"
	echo ""
}
 
 
# Funktion zum Erzeugen eines Verzeichnisses
create_logdir()
{
	if [ ! -e "$LOGFILE_PATH" ]
		then
		mkdir $LOGFILE_PATH
	fi
}
 
 
###################
#  Hauptprogramm  
###################
 
# Aufruf der Hilfe wenn kein Aufrufparameter angegeben ist
if [ "$#" -eq 0 ]
	then
	usage
fi
 
# While-Schleife mit verschachtelter Case-Fallunterscheidung der Aufrufparameter
while getopts hs:d: OPTION
	do
	case $OPTION in
		h)
		usage
		;;
 
		s)
		FILE_SIZE=$OPTARG
		# Test ob die angegebene Dateigröße gültig ist 
		case $FILE_SIZE in
			1MB|10MB|100MB|1GB|10GB|50GB|100GB|1000GB)
			# Aufruf der Funktionen
			create_logdir
			do_run
			;;
 
			*)
			echo "Falsches Argument ($FILE_SIZE) angegeben. Erlaubte Dateigrößen sind 1MB, 10MB, 100MB,1GB, 10GB, 50GB, 100GB oder 1000GB"
			echo ""
			exit 1
			;;
		esac
		;;
 
		d)
		FILE_SIZE=$OPTARG
		# Test ob die angegebene Dateigröße gültig ist 
		case $FILE_SIZE in
			1MB|10MB|100MB|1GB|10GB|50GB|100GB|1000GB)
			# Aufruf der Funktionen
			create_logdir
			do_debug
			;;
 
			*)
			echo "Falsches Argument ($FILE_SIZE) angegeben. Erlaubte Dateigrößen sind 1MB, 10MB, 100MB,1GB, 10GB, 50GB, 100GB oder 1000GB"
			echo ""
			exit 1
			;;
		esac
		;;
 
		\?)
		echo $ERRORMESSAGE
		exit 2
		;;
	esac
done
 
shift $(expr $OPTIND - 1)
exit 0
#EOF
run_speedtest.sh.txt · Zuletzt geändert: 2021/02/03 10:24 von dwadmin