Hierfür gibt es einige Möglichkeiten. Ich habe ein sehr einfaches Bash-Skript geschrieben, mit dem Sie die Geschwindigkeit in KB pro Sekunde für eine gewünschte Schnittstelle überwachen können, wenn die Download- Geschwindigkeit unter das von Ihnen festgelegte Minimum fällt. , dann wird Ihr Computer heruntergefahren.
Hier sind einige Dinge zu beachten:
Dies ist ein Bash-Skript, das ich schnell zusammengestellt habe. Es gibt viele verschiedene Techniken, um das gleiche Ergebnis zu erzielen. Es ist jedoch einfach zu verstehen und zu implementieren.
Sie müssen das Bash-Skript von cron als root ausführen, dh Sie müssen cron als root-Benutzer öffnen und einen Cronjob wie gewünscht hinzufügen. Der Grund, warum es in root's cron sein muss, ist, dass Sie Ihren Computer nicht über die Befehlszeile herunterfahren können, ohne root zu sein, und Sie können sudo nicht verwenden, wenn Sie nicht auf der Tastatur sind. Es gibt Möglichkeiten, es zu umgehen, aber ich versuche es so einfach wie möglich zu halten.
Ich benutze ein Linux-Tool namens ifstat , deshalb musst du es installieren, sonst funktioniert das Skript nicht:
sudo apt-get install ifstat
Es gibt zwei Optionen, die Sie im folgenden Skript ändern können: INTERFACE und MIN_SPEED . Die SCHNITTSTELLE muss auf die Schnittstelle eingestellt sein, die Sie zum Herunterladen verwenden, entweder eth0 für Ihr kabelgebundenes Gerät oder wlan0 für Ihr kabelloses Gerät. Sie können den Befehl ifconfig in der Befehlszeile verwenden, um festzustellen, welche Schnittstellen verfügbar sind. Die MIN_SPEED ist wie gewünscht eingestellt, in meinem Beispiel habe ich sie auf die Nummer 5 gesetzt , was bedeutet, dass mein Computer heruntergefahren wird, wenn meine Download-Geschwindigkeit weniger als 5 KB pro Sekunde beträgt .
Um das Skript zu verbessern, können wir eine while-Schleife verwenden und die Download-Geschwindigkeit über einen bestimmten Zeitraum prüfen. Wenn der Durchschnitt unter dem Mindestwert liegt, den wir zum Herunterfahren und Ausführen des Skripts als Dienst benötigen, ist dies ein Wenn Sie das Problem genauer angehen möchten, kann ich Ihnen gerne dabei helfen.
Kopieren und die folgenden Code in eine Datei in einem Verzeichnis Ihrer Wahl auf Ihrem Computer, beispielsweise einfügen i_speed.sh , dann, sehr wichtig ist , macht die Datei ausführbar , das von der Kommandozeile tun, wenn Sie Ihre Datei i_speed.sh genannt wurde wie folgt:
chmod +x i_speed.sh
Jetzt können Sie sudo -i als root-Datei verwenden und Ihren Cronjob so einrichten, dass das Skript in von Ihnen gewünschten Zeitintervallen aufgerufen wird.
Code zum Kopieren und Einfügen in eine Datei namens i_speed.sh:
#!/bin/bash
# Bash script to determine a network interfaces current transfer speed and
shutdown the computer if the current transfer speed is less than MIN_SPEED
# Set INTERFACE to the network interface you would like to monitor
INTERFACE='wlan0'
# Set MIN_SPEED in KB per second that network interface (INTERFACE) speed
must be larger than, if speed falls below this number then computer will shutdown.
MIN_SPEED=5
# This is where the work get's done:
CURRENT_SPEED=`ifstat -i $INTERFACE 1 1 | awk '{print $1}' | sed -n '3p'`
INT=${CURRENT_SPEED/\.*}
if [ $INT -lt $MIN_SPEED ]; then
shutdown -h now
else
exit
fi
AKTUALISIEREN
Ich habe ein kleines Python-Programm als Aktualisierung des obigen Bash-Skripts geschrieben, mit dem Sie zusätzliche Variablen wie Wiederholungen und Intervalle festlegen können, um eine durchschnittliche Mindestgeschwindigkeit über einen bestimmten Zeitraum zu erhalten. Weitere Updates werden eine GUI für dieses Programm beinhalten. Kopieren Sie einfach den folgenden Code und fügen Sie ihn in eine Datei ein. download_monitor.py
Führen Sie ihn dann wie folgt aussudo python download_monitor.py
## Download Monitor v0.1 - March 2012
# Set the interface you wish to monitor, eg: eth0, wlan0, usb0
INTERFACE = "eth0"
# Set the minimum download speed in KB/s that must be achieved.
MINIMUM_SPEED = 15
# Set the number of retries to test for the average minimum speed. If the average speed is less
# than the minimum speed for x number of retries, then shutdown.
RETRIES = 5
# Set the interval (in seconds), between retries to test for the minimum speed.
INTERVAL = 10
import os, time
from commands import getoutput
def worker ():
RETRIES_COUNT = RETRIES
while True:
SPEED = int(float(getoutput("ifstat -i %s 1 1 | awk '{print $1}' | sed -n '3p'" % INTERFACE)))
if (SPEED < MINIMUM_SPEED and RETRIES_COUNT <= 0):
os.system("shutdown -h now")
elif SPEED < MINIMUM_SPEED:
RETRIES_COUNT -= 1
time.sleep(INTERVAL)
else:
RETRIES_COUNT = RETRIES
time.sleep(INTERVAL)
worker()
Ich fand dieses Thema sehr hilfreich. Ohne Python-Kenntnisse habe ich das obige Skript aktualisiert, um die durchschnittliche Netzwerkgeschwindigkeit zu ermitteln und in den Energiesparmodus zu wechseln, wenn die durchschnittliche Geschwindigkeit über der Mindestgeschwindigkeit liegt. Nach langem Schlaf werden die Berechnungen zurückgesetzt und die Durchschnittsgeschwindigkeit erneut berechnet.
quelle