Есть несколько способов сделать это: я написал очень простой bash-скрипт, который вы можете использовать для контроля скорости в килобайтах в секунду для нужного интерфейса, когда скорость загрузки падает ниже минимальной (которую вы можете установить) , тогда ваш компьютер будет выключен.
Вот некоторые вещи, которые следует иметь в виду:
Это сценарий bash, который я собрал быстро, есть много разных методов для достижения одного и того же результата, однако его легко понять и реализовать.
Вам нужно будет выполнить bash-скрипт из cron как root , это означает, что вам нужно открыть cron как пользователь root и добавить cronjob по желанию. Причина, по которой он должен быть в корне root, заключается в том, что вы не сможете выключить компьютер из командной строки, не будучи пользователем root, и вы не можете использовать sudo, находясь вдали от клавиатуры. Есть способы обойти это, но я стараюсь сделать это как можно проще.
Я использую инструмент Linux под названием ifstat , поэтому вам нужно будет установить его, иначе скрипт не будет работать:
sudo apt-get install ifstat
В приведенном ниже сценарии можно изменить 2 параметра: ИНТЕРФЕЙС и MIN_SPEED . ИНТЕРФЕЙС должен быть настроен на интерфейс, который вы используете для загрузки, либо eth0 для вашего проводного устройства, либо wlan0 для вашего беспроводного устройства, вы можете использовать команду ifconfig из командной строки, чтобы увидеть, какие интерфейсы у вас есть. MIN_SPEED установлен по желанию, в моем примере я установил его на номер 5 , что означает, что если моя скорость загрузки составляет менее 5 КБ в секунду, мой компьютер выключится.
Наконец, чтобы улучшить сценарий, мы могли бы использовать цикл while и проверять скорость загрузки в течение определенного периода времени и, если среднее значение меньше минимального, который мы бы отключили, а также запускать сценарий как службу, это более точный способ решения проблемы, и я буду рад помочь вам в этом, если вы хотите следовать по этому пути.
Скопируйте и вставьте приведенный ниже код в файл в выбранном вами каталоге на вашем компьютере, например, i_speed.sh , а затем, очень важно, сделайте файл исполняемым , чтобы сделать это из командной строки, если ваш файл назывался i_speed.sh. следующее:
chmod +x i_speed.sh
Теперь вы можете sudo -i получить root-права и настроить свой cronjob для вызова скрипта через желаемые промежутки времени.
Код для копирования и вставки в файл с именем 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
ОБНОВИТЬ
Я написал небольшую программу на Python в качестве обновления вышеописанного bash-скрипта, который позволяет вам устанавливать дополнительные переменные, такие как повторные попытки и интервал, чтобы получить среднюю минимальную скорость за указанный период времени. Дальнейшие обновления будут включать графический интерфейс для этой программы. Просто скопируйте и вставьте приведенный ниже код в файл, например, download_monitor.py
затем запустите его следующим образом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 $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()