Hay algunas maneras de hacerlo, he escrito un script bash muy simple que puede usar para monitorear la velocidad en KB p / s para una interfaz deseada, cuando la velocidad de descarga cae por debajo del mínimo (que puede establecer) , entonces tu computadora se apagará.
Algunas cosas a tener en cuenta aquí son:
Este es un script bash que preparé rápidamente, hay muchas técnicas diferentes para lograr el mismo resultado, sin embargo, es fácil de entender e implementar.
Deberá ejecutar el script bash desde cron como root , lo que significa que debe abrir cron como usuario root y agregar un cronjob como lo desee. La razón por la que debe estar en el cron de root es que no podrá apagar su computadora desde la línea de comandos sin ser root, y no puede usar sudo mientras esté lejos del teclado. Hay formas de evitarlo, pero estoy tratando de mantenerlo lo más simple posible.
Utilizo una herramienta de Linux llamada ifstat , por lo que deberá instalarla; de lo contrario, el script no funcionará:
sudo apt-get install ifstat
Hay 2 opciones que puede modificar en el siguiente script, INTERFACE y MIN_SPEED . La INTERFAZ debe configurarse en la interfaz que está utilizando para descargar, ya sea eth0 para su dispositivo con cable o wlan0 para su dispositivo inalámbrico, puede usar el comando ifconfig desde la línea de comandos para ver qué interfaces tiene disponibles. MIN_SPEED se configura como se desea, en mi ejemplo lo configuré en el número 5 , lo que significa que si mi velocidad de descarga es inferior a 5 KB por segundo , mi computadora se apagará.
Por último, para mejorar el script, podríamos usar un ciclo while y verificar la velocidad de descarga durante un período de tiempo específico y, si el promedio es menor que el mínimo, cerraríamos, además de ejecutar el script como servicio, este es un Una forma más precisa de abordar el problema y estaré encantado de ayudarlo con eso si esta es la ruta que le gustaría seguir.
Copie y pegue el código siguiente en un archivo en un directorio de su elección en su computadora, por ejemplo i_speed.sh , luego, muy importante, haga que el archivo sea ejecutable , para hacerlo desde la línea de comandos, si su archivo se llamó i_speed.sh como sigue:
chmod +x i_speed.sh
Ahora puede sudo -i para rootear y configurar su cronjob para llamar al script en los intervalos de tiempo que desee.
Código para copiar y pegar en un archivo llamado 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
ACTUALIZAR
Escribí un pequeño programa de Python como una actualización del script bash anterior que le permite establecer variables adicionales como reintentos e intervalos para obtener una velocidad mínima promedio durante un período de tiempo específico. Las actualizaciones adicionales incluirán una GUI para este programa. Simplemente copie y pegue el siguiente código en un archivo, por ejemplo download_monitor.py
, ejecútelo de la siguiente manerasudo 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()
Encontré este tema muy útil. Sin conocimiento de Python, actualicé el script anterior para obtener la velocidad promedio de la red y entrar en modo de suspensión prolongada si la velocidad promedio es mayor que la velocidad mínima. Después de reiniciar los cálculos de sueño prolongado, se calcula nuevamente la velocidad promedio.
fuente