Bununla ilgili birkaç yol var , indirme hızı minimumun altına düştüğünde , istediğiniz bir arayüz için KB p / s hızını izlemek için kullanabileceğiniz çok basit bir bash betiği yazdım. , bilgisayarınız kapanacaktır.
Burada akılda tutulması gereken bazı şeyler şunlardır:
Bu, hızlı bir şekilde bir araya getirdiğim bir bash betiğidir, aynı sonucu elde etmek için birçok farklı teknik vardır, ancak bu anlaşılması ve uygulanması kolaydır.
Bash betiğini cron'dan root olarak yürütmeniz gerekir , yani cron'u root kullanıcısı olarak açmanız ve istediğiniz gibi bir cronjob eklemeniz gerekir. Kökün cronunda olması gerekmesinin nedeni, bilgisayarınızı root olmadan komut satırından kapatamayacağınız ve klavyeden uzaktayken sudo kullanamazsınız. Etrafında dolaşmanın yolları var ama mümkün olduğunca basit tutmaya çalışıyorum.
Ben ifstat adlı bir linux aracı kullanın , bu yüzden bunu yüklemeniz gerekir aksi takdirde komut dosyası çalışmaz:
sudo apt-get install ifstat
Aşağıdaki kodda değiştirebileceğiniz 2 seçenek vardır, INTERFACE ve MIN_SPEED . INTERFACE'ın kablolu cihazınız için eth0 veya kablosuz cihazınız için wlan0 olarak indirmek için kullandığınız arayüze ayarlanması gerekir; hangi arayüzlere sahip olduğunuzu görmek için komut satırından ifconfig komutunu kullanabilirsiniz. MIN_SPEED istendiği gibi ayarlanır, benim örneğimde 5 numaraya ayarladım , bu da indirme hızım saniyede 5 KB'den azsa, bilgisayarımın kapanacağı anlamına gelir .
Son olarak, komut dosyasını geliştirmek için bir while döngüsü kullanabilir ve indirme hızını belirli bir süre boyunca kontrol edebiliriz ve ortalama minimumdan düşükse, komut dosyasını bir hizmet olarak çalıştırmanın yanı sıra kapanırdık Soruna yaklaşmanın daha doğru bir yolu ve takip etmek istediğiniz rota bu ise size yardımcı olmaktan memnuniyet duyarız.
Kopyalayıp bilgisayar, örnek üzerinde istediğiniz bir dizine bir dosyaya kodunun altına yapıştırın i_speed.sh , o zaman, çok önemli, dosya yürütülebilir hale dosya i_speed.sh çağrıldı eğer komut satırından bunu yapmak için, aşağıdaki gibi:
chmod +x i_speed.sh
Şimdi sudo -i'yi kök dizine kurabilir ve istediğiniz zaman aralıklarında komut dosyasını çağırmak için ayarlayabilirsiniz.
Kopyalamak ve i_speed.sh adlı bir dosyaya yapıştırmak için kod:
#!/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
GÜNCELLEME
Belirli bir süre içinde ortalama bir min hızı elde etmek için yeniden deneme ve aralık gibi ek değişkenleri ayarlamanıza izin veren yukarıdaki bash betiğine bir güncelleme olarak küçük bir python programı yazdım. Diğer güncellemeler bu program için bir GUI içerecektir. Aşağıdaki kodu kopyalayıp bir dosyaya yapıştırın, örnek download_monitor.py
sonra aşağıdaki gibi çalıştırınsudo 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()