Ci sono alcuni modi per farlo, ho scritto uno script bash molto semplice che puoi usare per monitorare la velocità in KB p / s per un'interfaccia desiderata, quando la velocità di download scende al di sotto del minimo (che puoi impostare) , quindi il computer verrà spento.
Alcune cose da tenere a mente qui sono:
Questo è uno script bash che ho messo insieme rapidamente, ci sono molte tecniche diverse per ottenere lo stesso risultato, tuttavia è facile da capire e implementare.
Dovrai eseguire lo script bash da cron come root , ciò significa che devi aprire cron come utente root e aggiungere un cronjob come desideri. Il motivo per cui deve essere nel cron di root è che non sarai in grado di spegnere il computer dalla riga di comando senza essere root, e non puoi usare sudo mentre sei lontano dalla tastiera. Ci sono modi per aggirarlo, ma sto cercando di renderlo il più semplice possibile.
Uso uno strumento Linux chiamato ifstat , quindi dovrai installarlo altrimenti lo script non funzionerà:
sudo apt-get install ifstat
Esistono 2 opzioni che è possibile modificare nello script seguente, INTERFACE e MIN_SPEED . L'INTERFACCIA deve essere impostata sull'interfaccia che stai usando per scaricare, sia eth0 per il tuo dispositivo cablato o wlan0 per il tuo dispositivo wireless, puoi usare il comando ifconfig dalla riga di comando per vedere quali interfacce hai a disposizione. MIN_SPEED è impostato come desiderato, nel mio esempio l'ho impostato sul numero 5 , il che significa che se la mia velocità di download è inferiore a 5 KB al secondo, il mio computer si spegnerà.
Infine, per migliorare lo script potremmo utilizzare un ciclo while e controllare la velocità di download in un periodo di tempo specificato e se la media è inferiore al minimo che dovremmo arrestare, nonché eseguire lo script come servizio, questo è un un modo più accurato di affrontare il problema e sarò felice di aiutarti se questo è il percorso che vorresti seguire.
Copia e incolla il codice seguente in un file in una directory di tua scelta sul tuo computer, ad esempio i_speed.sh , quindi, molto importante, rendi il file eseguibile , per farlo dalla riga di comando, se il tuo file si chiamava i_speed.sh come segue:
chmod +x i_speed.sh
Ora puoi sudo -i per eseguire il root e configurare il tuo cronjob per chiamare lo script ad intervalli di tempo che desideri.
Codice per copiare e incollare in un file chiamato 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
AGGIORNARE
Ho scritto un piccolo programma Python come aggiornamento dello script bash sopra che consente di impostare variabili aggiuntive come tentativi e intervallo per ottenere una velocità minima media in un periodo di tempo specificato. Ulteriori aggiornamenti includeranno una GUI per questo programma. Basta copiare e incollare il codice seguente in un file, ad esempio download_monitor.py
eseguirlo come seguesudo 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()