Ada beberapa cara untuk menyelesaikannya, saya telah menulis skrip bash yang sangat sederhana yang dapat Anda gunakan untuk memantau kecepatan dalam KB p / s untuk antarmuka yang diinginkan, ketika kecepatan unduh turun di bawah minimum (yang dapat Anda atur) , maka komputer Anda akan dimatikan.
Beberapa hal yang perlu diingat di sini adalah:
Ini adalah skrip bash yang saya kumpulkan dengan cepat, ada banyak teknik berbeda untuk mencapai hasil yang sama, namun ini mudah dipahami dan diimplementasikan.
Anda perlu menjalankan skrip bash dari cron sebagai root , itu artinya Anda harus membuka cron sebagai pengguna root dan menambahkan cronjob seperti yang diinginkan. Alasannya perlu di cron root adalah bahwa Anda tidak akan dapat mematikan komputer dari baris perintah tanpa menjadi root, dan Anda tidak dapat menggunakan sudo saat Anda jauh dari keyboard. Ada beberapa cara untuk menyiasatinya, tetapi saya berusaha untuk membuatnya sesederhana mungkin.
Saya menggunakan alat linux bernama ifstat , jadi Anda harus menginstal ini kalau tidak skrip tidak akan berfungsi:
sudo apt-get install ifstat
Ada 2 opsi yang dapat Anda modifikasi dalam skrip di bawah ini, INTERFACE dan MIN_SPEED . INTERFACE perlu diatur ke antarmuka yang Anda gunakan untuk mengunduh, baik eth0 untuk perangkat kabel Anda atau wlan0 untuk perangkat nirkabel Anda, Anda dapat menggunakan perintah ifconfig dari baris perintah untuk melihat antarmuka apa saja yang tersedia. MIN_SPEED diatur sesuai keinginan, dalam contoh saya, saya mengaturnya ke angka 5 , yang berarti bahwa jika kecepatan unduh saya kurang dari 5 KB per detik, maka komputer saya akan mati.
Terakhir, untuk meningkatkan skrip kita bisa menggunakan loop sementara dan memeriksa kecepatan unduhan selama periode waktu tertentu dan jika rata-rata kurang dari minimum kita akan mematikan, serta menjalankan skrip sebagai layanan, ini adalah cara yang lebih akurat dalam mendekati masalah dan saya akan dengan senang hati membantu Anda dengan itu jika ini adalah rute yang ingin Anda ikuti.
Salin dan tempel kode di bawah ini ke dalam file dalam direktori pilihan Anda di komputer Anda, contoh i_speed.sh , kemudian, sangat penting, buat file tersebut dapat dieksekusi , untuk melakukan ini dari baris perintah, jika file Anda dipanggil i_speed.sh sebagai berikut:
chmod +x i_speed.sh
Sekarang Anda dapat sudo -i untuk me-root dan mengatur cronjob Anda untuk memanggil skrip pada interval waktu yang Anda inginkan.
Kode untuk menyalin dan menempel ke file bernama 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
MEMPERBARUI
Saya menulis sebuah program python kecil sebagai pembaruan untuk skrip bash di atas yang memungkinkan Anda untuk mengatur variabel tambahan seperti coba lagi dan interval untuk mendapatkan kecepatan minimum rata-rata selama periode waktu tertentu. Pembaruan lebih lanjut akan mencakup GUI untuk program ini. Cukup salin dan tempel kode di bawah ini ke dalam file, contoh download_monitor.py
kemudian jalankan sebagai berikutsudo 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()