Il y a quelques façons de procéder, j'ai écrit un script bash très simple que vous pouvez utiliser pour surveiller la vitesse en Ko p / s pour une interface souhaitée, lorsque la vitesse de téléchargement tombe en dessous du minimum (que vous pouvez définir) , votre ordinateur sera alors arrêté.
Voici quelques éléments à garder à l'esprit:
Il s'agit d'un script bash que j'ai mis en place rapidement, il existe de nombreuses techniques différentes pour obtenir le même résultat, mais c'est facile à comprendre et à mettre en œuvre.
Vous devrez exécuter le script bash depuis cron en tant que root , cela signifie que vous devez ouvrir cron en tant qu'utilisateur root et ajouter un cronjob comme vous le souhaitez. La raison pour laquelle il doit être dans le cron de root est que vous ne pourrez pas arrêter votre ordinateur à partir de la ligne de commande sans être root, et vous ne pouvez pas utiliser sudo lorsque vous êtes loin du clavier. Il existe des moyens de le contourner, mais j'essaie de le garder aussi simple que possible.
J'utilise un outil Linux appelé ifstat , vous devrez donc l'installer sinon le script ne fonctionnera pas:
sudo apt-get install ifstat
Il y a 2 options que vous pouvez modifier dans le script ci-dessous, l' INTERFACE et MIN_SPEED . L'INTERFACE doit être définie sur l'interface que vous utilisez pour télécharger, soit eth0 pour votre appareil filaire ou wlan0 pour votre appareil sans fil, vous pouvez utiliser la commande ifconfig à partir de la ligne de commande pour voir quelles interfaces vous avez disponibles. Le MIN_SPEED est défini comme vous le souhaitez, dans mon exemple, je l'ai défini sur le nombre 5 , ce qui signifie que si ma vitesse de téléchargement est inférieure à 5 Ko par seconde, mon ordinateur s'arrêtera.
Enfin, pour améliorer le script, nous pourrions utiliser une boucle while et vérifier la vitesse de téléchargement sur une période de temps spécifiée et si la moyenne est inférieure au minimum, nous arrêterions, ainsi que d'exécuter le script en tant que service, c'est un manière plus précise d'aborder le problème et je serai heureux de vous aider avec cela si c'est la route que vous souhaitez suivre.
Copiez et collez le code ci-dessous dans un fichier dans un répertoire de votre choix sur votre ordinateur, exemple i_speed.sh , puis, très important, rendez le fichier exécutable , pour ce faire à partir de la ligne de commande, si votre fichier s'appelait i_speed.sh comme suit:
chmod +x i_speed.sh
Vous pouvez maintenant sudo -i pour rooter et configurer votre cronjob pour appeler le script aux intervalles de temps que vous désirez.
Code à copier et coller dans un fichier appelé 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
MISE À JOUR
J'ai écrit un petit programme python en tant que mise à jour du script bash ci-dessus qui vous permet de définir des variables supplémentaires telles que les tentatives et l'intervalle pour obtenir une vitesse min moyenne sur une période de temps spécifiée. D'autres mises à jour comprendront une interface graphique pour ce programme. Copiez et collez simplement le code ci-dessous dans un fichier, exemple, download_monitor.py
puis exécutez-le comme suitsudo 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()