Existem algumas maneiras de fazer isso: escrevi um script bash muito simples que você pode usar para monitorar a velocidade em KB p / s para uma interface desejada, quando a velocidade de download cai abaixo do mínimo (que você pode definir) , o seu computador será desligado.
Algumas coisas a ter em mente aqui são:
Este é um script bash que eu montei rapidamente, existem muitas técnicas diferentes para alcançar o mesmo resultado, no entanto, é fácil de entender e implementar.
Você precisará executar o script bash a partir do cron como root , o que significa que você precisa abrir o cron como usuário root e adicionar um cronjob conforme desejado. A razão pela qual ele precisa estar no cron do root é que você não poderá desligar o computador da linha de comando sem ser o root e não poderá usar o sudo enquanto estiver longe do teclado. Existem maneiras de contornar isso, mas estou tentando mantê-lo o mais simples possível.
Eu uso uma ferramenta Linux chamada ifstat , então você precisará instalar isso, caso contrário o script não funcionará:
sudo apt-get install ifstat
Existem 2 opções que você pode modificar no script abaixo, INTERFACE e MIN_SPEED . O INTERFACE precisa ser definido como a interface que você está usando para fazer o download, eth0 para seu dispositivo com fio ou wlan0 para seu dispositivo sem fio, você pode usar o comando ifconfig na linha de comando para ver quais interfaces você tem disponível. O MIN_SPEED está definido como desejado, no meu exemplo, defino-o como número 5 , o que significa que, se a velocidade de download for menor que 5 KB por segundo , o computador será desligado.
Por fim, para melhorar o script, poderíamos usar um loop while e verificar a velocidade do download durante um período de tempo especificado. Se a média for menor que a mínima, desligaríamos e executaríamos o script como um serviço. maneira mais precisa de abordar o problema e terei prazer em ajudá-lo, caso seja esse o caminho que você deseja seguir.
Copie e cole o código abaixo em um arquivo em um diretório de sua escolha no seu computador, por exemplo, i_speed.sh e, muito importante, torne o arquivo executável , para fazer isso na linha de comando, se o arquivo for chamado i_speed.sh do seguinte modo:
chmod +x i_speed.sh
Agora você pode sudo -i para fazer root e configurar seu cronjob para chamar o script nos intervalos de tempo desejados.
Código para copiar e colar em um arquivo chamado 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
ATUALIZAR
Eu escrevi um pequeno programa python como uma atualização para o script bash acima, que permite definir variáveis adicionais, como novas tentativas e intervalos, para obter uma velocidade mínima média durante um período especificado. Atualizações adicionais incluirão uma GUI para este programa. Apenas copie e cole o código abaixo em um arquivo, por exemplo download_monitor.py
, execute-o da seguinte maneirasudo 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()