มีสองสามวิธีที่จะดำเนินการเกี่ยวกับเรื่องนี้ฉันได้เขียนสคริปต์ทุบตีง่ายๆที่คุณสามารถใช้เพื่อตรวจสอบความเร็วเป็นKB p / sสำหรับอินเทอร์เฟซที่ต้องการเมื่อความเร็วในการดาวน์โหลดลดลงต่ำกว่าขั้นต่ำ (ซึ่งคุณสามารถตั้งค่าได้) จากนั้นคอมพิวเตอร์ของคุณจะถูกปิด
สิ่งที่ต้องจำไว้ที่นี่คือ:
นี่เป็นสคริปต์ทุบตีที่ฉันรวบรวมไว้อย่างรวดเร็วมีเทคนิคต่าง ๆ มากมายเพื่อให้ได้ผลลัพธ์เดียวกัน แต่นี่เป็นวิธีที่เข้าใจง่ายและนำไปปฏิบัติ
คุณจะต้องรันสคริปต์ทุบตีจากcron ในฐานะ rootซึ่งหมายความว่าคุณต้องเปิด cron ในฐานะผู้ใช้รูทและเพิ่ม cronjob ตามต้องการ เหตุผลที่ต้องอยู่ใน cron ของ root คือคุณจะไม่สามารถปิดคอมพิวเตอร์ของคุณจากบรรทัดคำสั่งโดยไม่ต้องเป็น root และคุณไม่สามารถใช้ sudo ได้ในขณะที่คุณไม่อยู่ที่คีย์บอร์ด มีวิธีรับรอบ แต่ฉันพยายามทำให้ง่ายที่สุด
ฉันใช้เครื่องมือ linux ชื่อifstatดังนั้นคุณจะต้องติดตั้งสิ่งนี้มิฉะนั้นสคริปต์จะไม่ทำงาน:
sudo apt-get install ifstat
มี 2 ตัวเลือกที่คุณสามารถแก้ไขในสคริปต์ด้านล่างที่INTERFACEและMIN_SPEED INTERFACE จะต้องตั้งค่าเป็นอินเทอร์เฟซที่คุณใช้ในการดาวน์โหลดไม่ว่าจะเป็น eth0 สำหรับอุปกรณ์แบบมีสายหรือ wlan0 สำหรับอุปกรณ์ไร้สายของคุณคุณสามารถใช้คำสั่งifconfigจากบรรทัดคำสั่งเพื่อดูอินเตอร์เฟสที่คุณมี MIN_SPEED ถูกตั้งค่าตามที่ต้องการในตัวอย่างของฉันฉันตั้งค่าเป็นหมายเลข5ซึ่งหมายความว่าหากความเร็วในการดาวน์โหลดของฉันน้อยกว่า5 KB ต่อวินาทีคอมพิวเตอร์ของฉันจะปิดเครื่อง
สุดท้ายเพื่อปรับปรุงสคริปต์เราสามารถใช้สักครู่ห่วงและตรวจสอบความเร็วการดาวน์โหลดในช่วงเวลาที่กำหนดและถ้าค่าเฉลี่ยน้อยกว่าขั้นต่ำที่เราจะปิดเช่นเดียวกับเรียกใช้สคริปต์เป็นบริการนี้เป็น วิธีที่แม่นยำยิ่งขึ้นในการเข้าถึงปัญหาและฉันยินดีที่จะช่วยคุณในเรื่องนี้หากเป็นเส้นทางที่คุณต้องการติดตาม
คัดลอกและวางรหัสด้านล่างลงในไฟล์ในไดเรกทอรีที่คุณเลือกบนคอมพิวเตอร์ของคุณเช่นi_speed.shจากนั้นสำคัญมากทำให้ไฟล์นั้นทำงานได้เพื่อทำสิ่งนี้จากบรรทัดคำสั่งหากไฟล์ของคุณชื่อ i_speed.sh ดังต่อไปนี้:
chmod +x i_speed.sh
ตอนนี้คุณสามารถ sudo -i เพื่อรูทและตั้งค่า 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
UPDATE
ฉันเขียนโปรแกรมหลามขนาดเล็กเป็นการอัปเดตของสคริปต์ทุบตีด้านบนซึ่งช่วยให้คุณตั้งค่าตัวแปรเพิ่มเติมเช่นการลองใหม่และช่วงเวลาเพื่อให้ได้ความเร็วขั้นต่ำเฉลี่ยในช่วงเวลาที่กำหนด การปรับปรุงเพิ่มเติมจะรวม GUI สำหรับโปรแกรมนี้ เพียงแค่คัดลอกและวางรหัสด้านล่างลงในไฟล์ตัวอย่าง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()