네트워크 트래픽이 없을 때 시스템을 종료하는 도구


13

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

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

미리 감사드립니다.

답변:


15

몇 가지 방법이 있습니다 . 다운로드 속도가 최소 (설정 가능한) 아래로 떨어질 때 원하는 인터페이스에 대한 속도를 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()

감사! 바로 내가 원하는 것입니다! 나는 내일 이것을 시도 할 것이다, 지금 missus를 얻었다. 그리고 그녀는 약간의 리눅스 자유 시간을 원한다. 그러나 그것은 내가 찾고 있었던 스크립트이다. 감사합니다
cirkator

Hey man :) 미안하지만 답장을 보내지 못해서 죄송합니다. 그러나 그것은 작동 중입니다 :) 스크립트에 대해 더 많이 생각했습니다. 프로그래밍이 가능하여 약간 다르게 작동합니까? 스크립트를 시작할 때 시작한 다음 바탕 화면에 작은 창을 표시하면 좋을 것입니다. "스크립트를 중지하려면"예 : "NO"를 입력하는 데 3 분이 걸립니다. 그렇지 않으면 PC가 종료됩니다. 예를 들어 5 분 동안 네트워크 트래픽 (또는 그 이하)이 아닙니다. "
cirkator

이 방법으로 모든 시작에서 cron을 통해 스크립트를 시작할 수 있지만 실제로 PC에 있고 스크립트를 실행하고 싶지 않으면 쉽게 비활성화 할 수 있습니다. 그리고 예약 된 자동 시작으로 오전 3시에 다운로드 만한다고하면 3 분을 카운트 다운 한 다음 스크립트를 "Go and monitor-mode"로 설정합니다. 또한 스크립트를 항상 실행하고 검사를 계속할 수 있습니까? 아니면 cron으로 매분마다 스크립트를 실행하고 네트워크 트래픽이 없는지 확인할 수 있습니까? 다시 감사합니다 당신은 남자입니다 :)
cirkator

@cirkator 나는 당신을 위해 일하고있어 기쁘다. 물론 모든 옵션이 가능하며 올바른 방법으로 수행 할 수 있습니다. 좀 더 공식적인 프로그램을 작성하게되어 기쁘지만 조금 더 오래 걸릴 것입니다. 내가 제자리에 있으면 시험해 보도록하겠습니다.
kingmilo

전 세계에서 항상 시간을 내십시오. 나는 당신이 자유 시간에 우리를 위해 무언가를 코딩하고 있다는 생각에 행복합니다. 대단히 감사합니다! :)
cirkator

3

이 주제가 매우 유용하다는 것을 알았습니다. 파이썬 지식이 없으면 평균 속도가 최소 속도 이상이면 평균 네트워크 속도를 얻고 오래 잠자기 위해 위의 스크립트를 업데이트했습니다. 긴 수면 계산이 재설정되고 평균 속도가 다시 계산됩니다.

## 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()

대박. 따라서 이것은이 cronjob이 한 번만 시작되어야한다는 것을 의미합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.