मैं नेटवर्क इंटरफ़ेस अपटाइम के बारे में जानकारी कैसे प्राप्त कर सकता हूं?


8

मेरे पास उबंटू मशीन और डेबियन मशीन है।

दोनों पर मैं यह देखना चाहता हूं कि नेटवर्क इंटरफ़ेस कितनी देर तक जुड़ा रहा है। (वह है, एक आईपी आदि नेटवर्क से जुड़ा हुआ है न कि एक कैबेल की भौतिक स्थिति)। अंतिम परिवर्तन या कुछ इसी तरह के बाद से सेकंड या तारीख में समय।

अब तक मैंने कार्य करने के लिए थोड़ी स्क्रिप्ट लिखी है, लेकिन ऐसा लगता है कि इसे जांचने का एक और सामान्य तरीका होना चाहिए। एक कार्यक्रम या कुछ / खरीद या इस तरह से।

मेरी स्क्रिप्ट:

#!/bin/bash

if [ -f /etc/os-release ]; then

    if TMP=$(grep -i 'ubuntu' /etc/os-release); then

        # we are on ubuntu
        for i in $(/bin/ls -1 /var/log/syslog* | sort -r); do
                TMP=$(zgrep '(eth0): device state change: ip-config -> activated' "$i" | tail -1 | sed "s/ "$(hostname)"/*/")
        done

        WHEN=$(echo "$TMP" | cut -f1 -d '*')
        SEC=$(echo "$(date +%s) - $(date -d "$WHEN" +%s)" | bc)
        echo "Last link up: $WHEN ($SEC seconds ago)."

    elif TMP=$(grep -i 'debian' /etc/os-release); then

        # we are on debian
        TMP=$(grep 'eth0: link up' /var/log/syslog* | tail -1 | cut -f2- -d':' | sed "s/ "$(uname -n)" kernel:/*/")
        WHEN=$(echo "$TMP" | cut -f1 -d '*')
        SEC=$(echo "$(date +%s) - $(date -d "$WHEN" +%s)" | bc)
        echo "Last link up: $WHEN ($SEC seconds ago)."

    fi

else
    echo "File /etc/os-release not found."
fi

1
शारीरिक केबल कनेक्शन होने के अलावा "नेटवर्क से जुड़े होने" जैसी कोई बात नहीं है। एक एनआईसी को सौंपा गया आईपी पता एक नेटवर्क राज्य का संकेतक नहीं है। यदि आप एनआईसी के लिए नेटवर्क कनेक्टिविटी निर्धारित करना चाहते हैं, तो आपको इसे सक्रिय रूप से मॉनिटर करना होगा (उदाहरण के लिए, समय-समय पर पिंग को दूसरे लक्ष्य पर भेजकर या लगातार टीसीपी कनेक्शन होने पर)।
डेर होकस्टापलर

हम अच्छी तरह से तब, जब मेरा राउटर रीबूट करता है (लगभग 1 मिनट), मेरे एनआईसी ने इसे आईपी हटा दिया है और फिर से पुन: असाइन किया गया है (नेटवर्क नेटवर्क)। मेरा iMac कुछ ऐसा ही करता है। मैं वास्तव में जानना चाहता हूं कि राउटर ने कब रिबूट किया। मेरे iMac और linux में लॉग में मैं देख सकता हूं कि जब इसे फिर से असाइन किया गया था, लेकिन मुझे लगता है कि NetworkManager जैसी किसी चीज के बिना यह अभी भी आईपी असाइन किया गया है? हो सकता है कि मुझे इसके बजाय NetworkManager पर करीब से नज़र डालनी चाहिए। धन्यवाद।
स्टीफन लिथेन

1
मैं मान रहा हूं कि NetworkManager (या अन्य घटक) सक्रिय कनेक्शन पर निगरानी करता है। यदि कोई कनेक्शन टूट जाता है, तो यह आपके गेटवे (राउटर) की उपलब्धता को निर्धारित करता है, एक बार यह पता लगाने के बाद कि यह डाउन है, यह डीएचसीपी के माध्यम से सौंपा गया आईपी पता जारी कर सकता है। या हो सकता है कि यह गेटवे के फिर से उपलब्ध होने का इंतजार करता है और फिर आईपी पते को फिर से असाइन करने के लिए कहता है। किसी भी तरह से, इस प्रश्न का उपयोग करने का प्रस्ताव है ip monitor(अन्य बातों के अलावा), यह देखने लायक हो सकता है।
डेर होकस्टापलर

1
हो सकता है कि स्क्रिप्ट को /etc/dhcp3/dhclient-enter-hooks.d/एक विकल्प में रखना भी एक विकल्प हो। लेकिन मुझे यह कहने के लिए पर्याप्त जानकारी नहीं मिल रही है कि यह कैसे काम करता है।
डेर होकस्टाप्लर

यदि आपका राउटर रिबूट करता है, तो आप यह देखना चाहते हैं कि नेटवर्क पर इसका क्या प्रभाव पड़ता है। मेरे पास एक एनएएस है जो बीप्स की एक श्रृंखला बनाता है जब मैं उससे केबल काटता हूं। अभी, इसमें एक क्रॉसओवर केबल है जो इसे सर्वर में प्लग करता है। यदि मैं सर्वर को रिबूट करता हूं, तो NAS लिंक खो देता है, और शोर करता है। आप जो वर्णन करते हैं, उससे आप वास्तव में आईपी पैकेट के बारे में परवाह नहीं करते हैं, न ही आपके कंप्यूटर के एनआईसी पोर्ट में एक केबल प्लग किया गया है, लेकिन आप लिंक के बारे में जानना चाहते हैं। मीडिया सेंस नामक तकनीक का उपयोग करके इसका पता लगाया जा सकता है। (सुविधा को अक्सर "मीडिया स्टेट" भी कहा जा सकता है।) उस पर लॉगिंग परिवर्तन करने का प्रयास करें।
TOOGAM

जवाबों:


1

लिनक्स कर्नेल उस समय को ट्रैक नहीं करता है जब कोई इंटरफ़ेस शुरू होता है।

भीतर struct net_deviceकोई क्षेत्र है जो एक रखती है jiffiesजब एक अंतरफलक शुरू कर दिया है के लिए मूल्य।

आपके द्वारा प्रबंधित किया जाने वाला सबसे अच्छा उपयोगकर्ता नाम स्क्रिप्ट और लॉग से कुछ अनुमानित विधि है।


1

dhclientनेटवर्क से पुनः कनेक्ट होने पर NetworkManager द्वारा मेरी मशीन को पुनः आरंभ किया जाता है। तो शायद आप dhclientप्रक्रिया के प्रारंभ समय का उपयोग कर सकते हैं ?

ps -o start,cmd $(pgrep dhclient)

0

यहाँ मेरा वेरिएंट है (आपके जैसा ही):

~ # expr $(echo $(date +%s) - $(date -d "`grep 'eth0: leased' /var/log/messages | tail -1 | awk '{print $1, $2, $3}'`" +%s))
1116
~ #

1116 - आईपी पट्टे के बाद सेकंड।


0

यह वही करना चाहिए जो आप चाहते हैं, सेकंड में:

#!/bin/bash
STARTTIME=`date +%s`
GATEWAY=`ip r s | grep default | cut -d' ' -f3`
INTERVAL=1
while ping -c 1 -W 1 ${GATEWAY} >/dev/null 2>&1; 
do
  awk -v STIME="$STARTTIME" 'BEGIN {
   DTIME=systime()-STIME;
   printf "Seconds of uptime since %s: %d\n",
     strftime("%a %b %e %H:%M:%S %Z %Y",STIME),
     DTIME; }';
  sleep $INTERVAL;
done

echo "HOST DROPPED!"

कौन से आउटपुट:

user@host $ sh test-script.sh
Seconds of uptime since Sat Nov 15 01:14:26 EST 2014: 0
Seconds of uptime since Sat Nov 15 01:14:26 EST 2014: 1
Seconds of uptime since Sat Nov 15 01:14:26 EST 2014: 2
Seconds of uptime since Sat Nov 15 01:14:26 EST 2014: 3
Seconds of uptime since Sat Nov 15 01:14:26 EST 2014: 4
HOST DROPPED!

सिद्धांत: एक टाइमस्टैम्प प्राप्त करें STARTTIME, फिर हर परीक्षण करें INTERVALकि क्या गेटवे (के माध्यम से ip route show) अभी भी ऊपर है, यदि ऐसा है, तो वर्तमान टाइमस्टैम्प को मूल और प्रिंट से हटा दें। यदि नहीं, तो बाहर निकलें और इंगित करें कि मेजबान ने अपना कनेक्शन गिरा दिया है। प्रत्येक आदेश विकल्प के स्पष्टीकरण के लिए मैनपेज़ देखें। यदि आप हर सेकंड आउटपुट नहीं चाहते हैं, तो वृद्धि करें INTERVAL

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