답변:
몇 가지 방법이 있습니다 . 다운로드 속도가 최소 (설정 가능한) 아래로 떨어질 때 원하는 인터페이스에 대한 속도를 KB p / s 로 모니터링하는 데 사용할 수있는 매우 간단한 bash 스크립트를 작성했습니다 을 클릭하면 컴퓨터가 종료됩니다.
여기서 명심해야 할 사항은 다음과 같습니다.
이것은 내가 빨리 정리 한 bash 스크립트입니다. 같은 결과를 얻기위한 여러 가지 기술이 있지만 이해하고 구현하기가 쉽습니다.
cron에서 root로 bash 스크립트를 실행해야 합니다. 즉, cron을 루트 사용자로 열고 원하는대로 cronjob을 추가해야합니다. root의 cron에 있어야하는 이유는 root가 아닌 명령 줄에서 컴퓨터를 종료 할 수없고 키보드를 사용하지 않는 동안 sudo를 사용할 수 없기 때문입니다. 해결 방법이 있지만 가능한 한 간단하게 유지하려고합니다.
ifstat 라는 Linux 도구를 사용 하므로 이것을 설치해야합니다. 그렇지 않으면 스크립트가 작동하지 않습니다.
sudo apt-get install ifstat
아래 스크립트에서 INTERFACE 및 MIN_SPEED 옵션을 수정할 수 있습니다 . 인터페이스는 다운로드하는 데 사용하는 인터페이스 (유선 장치의 경우 eth0 또는 무선 장치의 경우 wlan0)로 설정 해야합니다. 명령 줄에서 ifconfig 명령을 사용하여 사용 가능한 인터페이스를 확인할 수 있습니다. MIN_SPEED는 원하는대로 설정되어 있습니다. 제 예제에서는 5로 설정했습니다. 즉, 다운로드 속도가 초당 5KB 미만이면 컴퓨터가 종료됩니다.
마지막으로 스크립트를 개선하기 위해 while 루프를 사용하고 지정된 시간 동안 다운로드 속도를 확인할 수 있으며 평균이 최소값보다 작은 경우 종료 할뿐만 아니라 스크립트를 서비스로 실행합니다. 문제에 접근하는 더 정확한 방법을 알려 드리고자합니다.이 경로가 원하는 경로라면 도움을 드리겠습니다.
아래 코드를 컴퓨터에서 선택한 디렉토리 (예 : 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
최신 정보
위의 bash 스크립트에 대한 업데이트로 작은 파이썬 프로그램을 작성했습니다.이 프로그램을 사용하면 재시도 및 간격과 같은 추가 변수를 설정하여 지정된 기간 동안 평균 최소 속도를 얻을 수 있습니다. 추가 업데이트에는이 프로그램의 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()
이 주제가 매우 유용하다는 것을 알았습니다. 파이썬 지식이 없으면 평균 속도가 최소 속도 이상이면 평균 네트워크 속도를 얻고 오래 잠자기 위해 위의 스크립트를 업데이트했습니다. 긴 수면 계산이 재설정되고 평균 속도가 다시 계산됩니다.
## Download Monitor v0.2 - June 2017
# Set the interface you wish to monitor, eg: eth0, wlan0, usb0
INTERFACE = "enp4s0"
# Set the minimum download speed in KB/s that must be achieved.
MINIMUM_SPEED = 10
# Set the number of retries to test for the average minimum speed.
RETRIES = 5
# Set the interval (in seconds), between retries to calculate average speed.
INTERVAL = 5
# Set the interval (in seconds), between recalculating average speed
LONG_INTERVAL = 600
import os, time
from commands import getoutput
def worker ():
RETRIES_COUNT = 1
SPEED = 0
while True:
# Sum downstream and upstream and add with previous speed value
# {print $1} use just downstream
# {print $2} use just upstream
# {print $1+$2} use sum of downstream and upstream
SPEED += int(float(getoutput("ifstat -i %s 1 1 | awk '{print $1+$2}' | sed -n '3p'" % INTERFACE)))
if RETRIES_COUNT > RETRIES:
# Calculate average speed from all retries
AVG_SPEED = int(float(SPEED) / float(RETRIES_COUNT))
# If average speed is below minimum speed - suspend
if AVG_SPEED < MINIMUM_SPEED:
os.system("shutdown -h now")
# Else reset calculations and wait for longer to retry calculation
else:
RETRIES_COUNT = 1
SPEED = 0
time.sleep(LONG_INTERVAL)
else:
RETRIES_COUNT += 1
time.sleep(INTERVAL)
worker()