नेटवर्क ट्रैफ़िक न होने पर सिस्टम बंद करने का टूल


13

मैं एक स्क्रिप्ट या एक उपकरण की तलाश कर रहा हूं, जिसे मैं ज़रूरत पड़ने पर चालू कर सकता हूं, जो मेरे कंप्यूटर को बंद कर देता है अगर उदाहरण के लिए 10 मिनट या 100kb से नीचे के लिए कोई नेटवर्क ट्रैफ़िक नहीं है।

स्वचालित डाउनलोड के लिए वास्तव में उपयोगी होगा। मुझे पता है कि इसके लिए डाउनसाइड हैं, इंटरनेट कनेक्शन लटका हुआ है, डाउनलोड प्रोग्राम लटका हुआ है, इसलिए यदि आपके पास बेहतर विचार है, तो कृपया मुझे बताएं।

अग्रिम में धन्यवाद।

जवाबों:


15

इसके बारे में जाने के कुछ तरीके हैं, मैंने एक बहुत ही सरल बैश स्क्रिप्ट लिखी है जिसका उपयोग आप वांछित इंटरफ़ेस के लिए KB p / s में गति की निगरानी के लिए कर सकते हैं , जब डाउनलोड की गति न्यूनतम से कम हो जाती है (जिसे आप सेट कर सकते हैं) , तो आपका कंप्यूटर बंद हो जाएगा।

यहाँ ध्यान रखने योग्य कुछ बातें हैं:

  • यह एक बैश स्क्रिप्ट है जिसे मैंने जल्दी से एक साथ रखा है, एक ही परिणाम प्राप्त करने के लिए कई अलग-अलग तकनीकें हैं, हालांकि यह समझने और लागू करने के लिए एक आसान है।

  • आपको क्रॉन से रूट के रूप में बैश स्क्रिप्ट को निष्पादित करने की आवश्यकता होगी , इसका मतलब है कि आपको रूट उपयोगकर्ता के रूप में क्रोन खोलने और वांछित के रूप में क्रोनजोब जोड़ने की आवश्यकता है। इसकी जड़ के क्रोन में होने का कारण यह है कि आप अपने कंप्यूटर को कमांड लाइन से रूट किए बिना बंद नहीं कर पाएंगे, और कीबोर्ड से दूर रहने पर आप sudo का उपयोग नहीं कर सकते। इसके आसपास आने के रास्ते हैं लेकिन मैं इसे यथासंभव सरल रखने की कोशिश कर रहा हूं।

  • मैं ifstat नामक एक लिनक्स टूल का उपयोग करता हूं , इसलिए आपको इसे स्थापित करने की आवश्यकता होगी अन्यथा स्क्रिप्ट काम नहीं करेगी:

    sudo apt-get install ifstat
    
  • 2 विकल्प हैं जिन्हें आप नीचे दी गई स्क्रिप्ट, INTERFACE और MIN_SPEED में संशोधित कर सकते हैं । इंटरफ़ेस जिसे आप डाउनलोड करने के लिए उपयोग कर रहे हैं, आपके वायरलेस डिवाइस के लिए eth0 या वायरलेस डिवाइस के लिए wlan0 के लिए सेट करने की आवश्यकता है, आप कमांड लाइन से ifconfig कमांड का उपयोग करके देख सकते हैं कि आपके पास क्या इंटरफेस है। MIN_SPEED को वांछित के रूप में सेट किया गया है, मेरे उदाहरण में मैंने इसे 5 नंबर पर सेट किया है , जिसका अर्थ है कि यदि मेरी डाउनलोड गति 5 KB प्रति सेकंड से कम है तो मेरा कंप्यूटर बंद हो जाएगा।

  • अंत में, स्क्रिप्ट पर सुधार करने के लिए हम थोड़ी देर के लूप का उपयोग कर सकते हैं और समय की एक निर्दिष्ट अवधि में डाउनलोड गति की जांच कर सकते हैं और यदि औसत न्यूनतम से कम है तो हम बंद कर देंगे, साथ ही स्क्रिप्ट को सेवा के रूप में चलाएंगे, यह एक है समस्या के समीप आने का अधिक सटीक तरीका और मुझे आपकी मदद करने में खुशी होगी यदि यह वह मार्ग है जिसका आप अनुसरण करना चाहते हैं।

अपने कंप्यूटर पर अपनी पसंद की निर्देशिका में एक फ़ाइल में नीचे दिए गए कोड को कॉपी और पेस्ट करें, उदाहरण के लिए i_speed.sh , फिर, बहुत महत्वपूर्ण, फ़ाइल को निष्पादन योग्य बनाएं , कमांड लाइन से ऐसा करने के लिए, यदि आपकी फ़ाइल को i_speed.sheed कहा गया था निम्नलिखित नुसार:

    chmod +x i_speed.sh 

अब आप समय-समय पर स्क्रिप्ट को कॉल करने के लिए अपने क्रोनजोब को रूट और सेटअप कर सकते हैं, जिसे आप चाहते हैं।

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

अपडेट करें

मैंने बैश लिपि के अद्यतन के रूप में एक छोटा सा अजगर कार्यक्रम लिखा था, जिससे आप एक निश्चित समय में एक औसत न्यूनतम गति प्राप्त करने के लिए अतिरिक्त चर जैसे कि रिट्रीज़ और अंतराल सेट कर सकते हैं। इस कार्यक्रम के लिए आगे के अपडेट में 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

अरे यार:) अफसोस है कि मैंने पहले जवाब नहीं दिया, लेकिन मुझे इसे परीक्षण करने का कोई समय नहीं मिला। लेकिन यह काम कर रहा है:) मैंने स्क्रिप्ट के बारे में कुछ और सोचा, क्या इसे प्रोग्राम करना संभव होगा इसलिए यह थोड़ा अलग व्यवहार करता है? यह बहुत अच्छा होगा यदि स्क्रिप्ट स्टार्टअप पर शुरू होती है, तो डेस्कटॉप पर एक छोटी सी खिड़की दिखाती है, जो कहती है: "आपके पास 3 मिनट हैं जैसे कि" NO "दर्ज करने के लिए यदि आप स्क्रिप्ट को रोकना चाहते हैं, अन्यथा यह पीसी को बंद कर देगा अगर वहाँ 5 मिनट की अवधि के लिए कोई नेटवर्क ट्रैफ़िक (या किसी चीज़ से नीचे) नहीं है। "
cirkator

इस तरह मैं हर स्टार्टअप पर क्रोन के माध्यम से स्क्रिप्ट शुरू कर सकता था, लेकिन अगर मैं शारीरिक रूप से पीसी पर हूं और मैं नहीं चाहता कि स्क्रिप्ट को मैं आसानी से अक्षम कर सकता हूं। और अगर इसका एक निर्धारित ऑटोस्टार्ट 3.am पर केवल डाउनलोड करने के लिए कहता है, तो यह 3 मिनट की गणना करेगा और फिर स्क्रिप्ट को "गो और मॉनिटर-मोड" में सेट करेगा। यह भी संभव है कि स्क्रिप्ट हर समय चल रही हो, और जांच होती रहे या क्या मैं इसे केवल हर मिनट क्रोन के साथ चला सकता हूँ और इसे बिना नेटवर्क ट्रैफ़िक के चेक करने देता हूँ? धन्यवाद आपको लगता है कि आदमी हैं
सर्जक

@ क्रेकर मुझे खुशी है कि यह आपके लिए काम कर रहा है। निश्चित रूप से, वे सभी विकल्प संभव हैं और संभवतः इसे करने के बारे में जाने का सही तरीका। मुझे अधिक आधिकारिक कार्यक्रम लिखने में खुशी होगी लेकिन इसमें थोड़ा अधिक समय लगेगा। एक बार मेरे पास कुछ होने के बाद मैं आपको परीक्षा दूंगा।
किंगमिलो

दुनिया में हर समय ले लो, मैं सिर्फ इस सोच में खुश हूं कि आप अपने भाग्य में हमारे लिए कुछ कोड कर रहे हैं। बहुत ज्यादा अधिमूल्यित! :)
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()

बहुत बढ़िया। तो इसका मतलब है कि इस क्रोनजॉब को केवल एक बार ही शुरू करना है, है ना?
बेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.