ネットワークトラフィックがないときにシステムをシャットダウンするツール


13

たとえば、必要なときにオンにできるスクリプトまたはツールを探しています。たとえば、たとえば10分間、または100kb未満のネットワークトラフィックがない場合にコンピューターをシャットダウンします。

自動ダウンロードには本当に便利でしょう。これには欠点があること、インターネット接続がハングしていること、ダウンロードプログラムがハングしていることを知っています。

前もって感謝します。

回答:


15

これにはいくつかの方法がありますが、ダウンロード速度が最小値(設定可能)を下回ったときに、目的のインターフェースのKB p / sで速度を監視するために使用できる非常に簡単なbashスクリプトを書きました、その後、コンピューターがシャットダウンされます。

ここで心に留めておくべきことがいくつかあります:

  • これは私がすばやくまとめたbashスクリプトです。同じ結果を達成するためのさまざまな手法がありますが、これは理解して実装するのが簡単なものです。

  • rootとしてcronからbashスクリプトを実行する必要があります。つまり、cronをrootユーザーとして開き、必要に応じてcronjobを追加する必要があります。rootのcronに配置する必要があるのは、rootにならないとコマンドラインからコンピューターをシャットダウンできず、キーボードから離れている間はsudoを使用できないためです。それを回避する方法はありますが、できるだけシンプルに保つようにしています。

  • 私はifstatというLinuxツールを使用しているため、これをインストールする必要があります。そうしないと、スクリプトが機能しません。

    sudo apt-get install ifstat
    
  • 以下のスクリプトで変更できる2つのオプション、INTERFACEMIN_SPEEDがあります。INTERFACEは、ダウンロードに使用するインターフェイス(有線デバイスの場合はeth0、ワイヤレスデバイスの場合はwlan0)に設定する必要があります。コマンドラインからifconfigコマンドを使用して、使用可能なインターフェイスを確認できます。MIN_SPEEDは、必要に応じて、設定私の例では、私は数に設定された5私のダウンロード速度未満であればということ、毎秒5キロバイトその後、私のコンピュータのシャットダウンします。

  • 最後に、スクリプトを改善するために、whileループを使用して、指定された期間にわたってダウンロード速度を確認し、平均が最小値を下回る場合はシャットダウンし、スクリプトをサービスとして実行します。問題にアプローチするより正確な方法であり、これがあなたが辿りたいルートである場合、私はあなたを支援させていただきます。

次のコードをコピーして、コンピューター上の任意のディレクトリにあるファイル(例:i_speed.sh)に貼り付けます。ファイルがi_speed.shという場合は、ファイルを実行可能にし、コマンドラインから実行します。次のように:

    chmod +x i_speed.sh 

これで、sudo -iでrootになり、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スクリプトの更新として小さなpythonプログラムを作成しました。これにより、再試行や間隔などの追加変数を設定して、指定した期間の平均最小速度を取得できます。今後の更新には、このプログラムの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()

ありがとう!それはまさに私が欲しかったものです!明日、これを試してみます。ミサを手に入れました。彼女はlinuxfreeの時間を望んでいます...しかし、それが私が探していたスクリプトです。ありがとう
-cirkator

ちょっと男:)早く返事をしなかったのは残念ですが、テストする時間はありませんでした。しかし、それはWORKINGです:)スクリプトについてもう少し考えましたが、それが少し異なる動作をするようにプログラムすることは可能でしょうか?スクリプトが起動時に開始され、デスクトップに小さなウィンドウが表示されたら、「スクリプトを停止したい場合は「NO」と入力します。それ以外の場合は、PCをシャットダウンします。たとえば、5分間ネットワークトラフィックがありません(またはそれ以下)。
-cirkator

この方法で、すべての起動時にcronを介してスクリプトを開始できますが、物理的にPCにいて、スクリプトを実行したくない場合は、簡単に無効にできます。また、スケジュール設定された自動起動により、ダウンロードのために午前3時に発言する場合、3分カウントダウンしてから、スクリプトを「Go and monitor-mode」に設定します。また、スクリプトを常に実行してチェックを続けることは可能ですか?たとえば、cronで毎分実行するだけでネットワークトラフィックがないかどうかを確認できますか?あなたが男であることに
再び感謝します

@cirkatorそれがあなたのために働いてうれしいです。確かに、これらのオプションはすべて可能であり、おそらくそれを行う正しい方法です。より公式なプログラムを作成できれば幸いですが、少し時間がかかります。準備が整ったら、テストしてみましょう。
キングミロ

世界のすべての時間を取ってください、私はあなたがあなたの自由時間に私たちのために何かをコーディングしているという考えでちょうど幸せです。非常に高く評価!:)
cirkator

3

このトピックは非常に役立ちました。Pythonの知識がなくても、上記のスクリプトを更新して平均ネットワーク速度を取得し、平均速度が最低速度を超える場合は長時間スリープ状態にします。長いスリープの計算がリセットされ、平均速度が再び計算された後。

## 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.