Є кілька способів зробити це, я написав дуже простий скрипт bash, який ви можете використовувати для контролю швидкості в кб / с для потрібного інтерфейсу, коли швидкість завантаження опускається нижче мінімальної (яку ви можете встановити) , тоді ваш комп'ютер буде відключений.
Тут слід пам’ятати:
Це базовий сценарій, який я швидко зібрав, є багато різних технік для досягнення того ж результату, однак це легко зрозуміти та реалізувати.
Вам потрібно буде виконати скрипт bash з cron як root , це означає, що вам потрібно відкрити cron як користувач root та додати cronjob за бажанням. Причина, в якій він повинен бути в корені кореня, полягає в тому, що ви не зможете вимкнути комп'ютер з командного рядка, не використовуючи root, і ви не можете використовувати sudo, перебуваючи далеко від клавіатури. Є способи її обійти, але я намагаюся зробити це максимально просто.
Я використовую інструмент Linux під назвою ifstat , тому вам потрібно буде встановити це, інакше сценарій не буде працювати:
sudo apt-get install ifstat
Є два варіанти, які ви можете змінити в нижченаведеному сценарії, INTERFACE та MIN_SPEED . INTERFACE потрібно встановити на інтерфейс, який ви використовуєте для завантаження, або eth0 для вашого провідного пристрою, або wlan0 для вашого бездротового пристрою, ви можете використовувати команду ifconfig з командного рядка, щоб побачити, які інтерфейси у вас є. MIN_SPEED встановлюється за бажанням, у моєму прикладі я встановив його на число 5 , а це означає, що якщо швидкість завантаження менша за 5 Кб в секунду, то мій комп'ютер вимкнеться.
Нарешті, для вдосконалення сценарію ми могли б скористатися циклом часу та перевірити швидкість завантаження протягом визначеного періоду часу, і якщо середнє значення буде меншим від мінімального, ми б відключились, а також запустили сценарій як сервіс, це Більш точний спосіб вирішити проблему, і я з радістю допоможу вам у цьому, якщо це маршрут, який ви хотіли б пройти.
Скопіюйте і вставте наведений нижче код у файл у вибраному вами каталозі на своєму комп’ютері, наприклад, i_speed.sh , тоді дуже важливо зробити файл виконуваним , щоб це зробити з командного рядка, якщо ваш файл називався i_speed.sh наступним чином:
chmod +x i_speed.sh
Тепер ви можете надіслати sui -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()