Existem algumas maneiras de fazer isso, eu escrevi um script muito simples que você pode usar para monitorar a velocidade em KB p / s por um interface desejada, quando a velocidade de download cair abaixo do mínimo (que você pode definir), o seu computador será desligado.
Algumas coisas que você deve ter em mente são:
-
Este é um script bash que eu reuni 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 de 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 será capaz de desligar o seu computador a partir da linha de comando sem ser o root, e você não pode usar o sudo enquanto estiver longe do teclado. Há maneiras de contornar isso, mas estou tentando mantê-lo o mais simples possível.
-
Eu uso uma ferramenta do Linux chamada ifstat , portanto, 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, a INTERFACE e MIN_SPEED . A INTERFACE precisa ser definida para a interface que você está usando para download, seja eth0 para seu dispositivo com fio ou wlan0 para seu dispositivo sem fio, você pode usar o comando ifconfig a partir do linha de comando para ver quais interfaces você tem disponíveis. O MIN_SPEED está definido como desejado, no meu exemplo eu o configurei para o número 5 , o que significa que se a minha velocidade de download for menor que 5 KB por segundo , meu computador desligamento.
-
Por último, para melhorar o script, poderíamos usar um while loop e verificar a velocidade de download em um período de tempo especificado e se a média é menor do que o mínimo que desligaríamos, assim como executar o script como um serviço, essa é uma maneira mais precisa de abordar o problema e ficaremos felizes em ajudá-lo se essa for a rota que você gostaria de seguir.
Copie e cole o código abaixo em um arquivo em um diretório de sua escolha em seu computador, exemplo i_speed.sh , então, muito importante, torne o arquivo executável , para fazer isso a partir da linha de comando, se o seu arquivo foi chamado i_speed.sh da seguinte forma:
chmod +x i_speed.sh
Agora você pode sudo -i para fazer o root e configurar seu cronjob para chamar o script em intervalos de tempo que você deseja.
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 }' | sed -n '3p''
INT=${CURRENT_SPEED/\.*}
if [ $INT -lt $MIN_SPEED ]; then
shutdown -h now
else
exit
fi
UPDATE
Eu escrevi um pequeno programa python como uma atualização para o script bash acima, que permite que você defina variáveis adicionais, como novas tentativas e intervalos, para obter uma velocidade mínima média em um período de tempo especificado. Atualizações adicionais incluirão uma GUI para este programa. Basta copiar e colar o código abaixo em um arquivo, por exemplo, download_monitor.py
e executá-lo da seguinte forma: sudo 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 }' | 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()