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