네트워크 트래픽이 없을 때 시스템을 종료하는 도구 있습니다. 자동 다운로드에 정말 유용합니다. 이것에 단점이 있다는

예를 들어 10 분 동안 네트워크 트래픽이 없거나 예를 들어 100kb 미만인 경우 컴퓨터를 종료 할 수있는 스크립트 나 도구를 찾고 있습니다.

자동 다운로드에 정말 유용합니다. 이것에 단점이 있다는 것을 알고 인터넷 연결이 중단되고 다운로드 프로그램이 중단되어 더 좋은 아이디어가 있으면 알려주십시오.

미리 감사드립니다.



답변

몇 가지 방법이 있습니다 . 다운로드 속도가 최소 (설정 가능한) 아래로 떨어질 때 원하는 인터페이스에 대한 속도를 KB p / s 로 모니터링하는 데 사용할 수있는 매우 간단한 bash 스크립트를 작성했습니다 을 클릭하면 컴퓨터가 종료됩니다.

여기서 명심해야 할 사항은 다음과 같습니다.

  • 이것은 내가 빨리 정리 한 bash 스크립트입니다. 같은 결과를 얻기위한 여러 가지 기술이 있지만 이해하고 구현하기가 쉽습니다.

  • cron에서 root로 bash 스크립트를 실행해야 합니다. 즉, cron을 루트 사용자로 열고 원하는대로 cronjob을 추가해야합니다. root의 cron에 있어야하는 이유는 root가 아닌 명령 줄에서 컴퓨터를 종료 할 수없고 키보드를 사용하지 않는 동안 sudo를 사용할 수 없기 때문입니다. 해결 방법이 있지만 가능한 한 간단하게 유지하려고합니다.

  • ifstat 라는 Linux 도구를 사용 하므로 이것을 설치해야합니다. 그렇지 않으면 스크립트가 작동하지 않습니다.

    sudo apt-get install ifstat
    
  • 아래 스크립트에서 INTERFACEMIN_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()