Làm cách nào tôi có thể nhận thông tin về thời gian hoạt động của giao diện mạng?


8

Tôi có một máy Ubuntu và một máy Debian.

Trên cả hai tôi muốn có thể xem giao diện mạng đã được kết nối trong bao lâu. (Nghĩa là, được kết nối với mạng nhận IP, v.v. Không phải trạng thái vật lý của dây cáp). Thời gian hoạt động tính bằng giây hoặc ngày + thời gian kể từ lần thay đổi cuối cùng hoặc bất cứ điều gì tương tự.

Đến bây giờ tôi đã viết một kịch bản nhỏ để thực hiện nhiệm vụ nhưng có vẻ như nên có một cách tổng quát hơn để kiểm tra điều này. Một chương trình hoặc một cái gì đó trong / Proc hoặc như vậy.

Kịch bản của tôi:

#!/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
Không có thứ gọi là "được kết nối với mạng" ngoài việc có kết nối cáp vật lý. Có một địa chỉ IP được gán cho một NIC không phải là một chỉ báo về trạng thái mạng. Nếu bạn muốn xác định kết nối mạng cho một NIC, bạn sẽ phải theo dõi nó một cách tích cực (ví dụ: bằng cách gửi ping định kỳ đến mục tiêu khác hoặc có kết nối TCP liên tục).
Der Hochstapler

Xin chào, sau đó khi bộ định tuyến của tôi khởi động lại (mất khoảng 1 phút), thì NIC của tôi đã bị xóa IP và sau đó được gán lại (byt NetworkManager). iMac của tôi làm một cái gì đó tương tự. Những gì tôi thực sự muốn biết là khi bộ định tuyến khởi động lại. Trong nhật ký trong iMac của tôi và trong linux tôi có thể thấy khi nào nó được gán lại lần nữa, nhưng tôi đoán nếu không có cái gì đó giống như NetworkManager thì nó vẫn được gán IP? Có lẽ tôi nên xem xét kỹ hơn về NetworkManager. Cảm ơn bạn.
Stefan Litva

1
Tôi giả định rằng NetworkManager (hoặc thành phần khác) thực hiện giám sát trên các kết nối hoạt động. Nếu kết nối bị ngắt, nó sẽ xác định tính khả dụng của cổng (bộ định tuyến) của bạn, một khi phát hiện thấy nó bị hỏng, nó có thể giải phóng địa chỉ IP được gán qua DHCP. Hoặc có thể nó đợi cổng có sẵn một lần nữa và sau đó yêu cầu địa chỉ IP được gán lại. Dù bằng cách nào, câu hỏi này đề xuất sử dụng ip monitor(trong số những thứ khác), nó có thể đáng xem.
Der Hochstapler

1
Có lẽ đặt một kịch bản /etc/dhcp3/dhclient-enter-hooks.d/cũng có thể là một lựa chọn. Nhưng tôi không tìm thấy đủ thông tin để nói chính xác nó hoạt động như thế nào.
Der Hochstapler

Nếu bộ định tuyến của bạn khởi động lại, bạn có thể muốn xem nó có ảnh hưởng gì đến mạng. Tôi có một NAS tạo ra một loạt tiếng bíp khi tôi ngắt kết nối cáp khỏi nó. Ngay bây giờ, nó có một cáp chéo cắm nó vào một máy chủ. Nếu tôi khởi động lại máy chủ, NAS sẽ mất liên kết và gây ồn. Từ những gì bạn mô tả, bạn không thực sự quan tâm đến các gói IP, cũng như liệu cáp có được cắm vào cổng NIC của máy tính hay không, nhưng bạn muốn biết về liên kết. Điều đó có thể được phát hiện bằng cách sử dụng công nghệ có tên Media Sense. (Tính năng này thường có thể được gọi là "Trạng thái phương tiện".) Hãy thử ghi nhật ký các thay đổi vào đó.
TUYỆT VỜI 15/2/2015

Câu trả lời:


1

Nhân Linux không theo dõi thời gian giao diện được khởi động.

Trong struct net_devicekhông có trường nào giữ jiffiesgiá trị khi giao diện được khởi động.

Cách tốt nhất bạn có thể quản lý là một số phương pháp được suy ra từ các tập lệnh và nhật ký không gian người dùng.


1

Trên máy của tôi dhclientđược NetworkManager khởi động lại khi kết nối lại với mạng. Vì vậy, có lẽ bạn có thể sử dụng thời gian bắt đầu của dhclientquá trình?

ps -o start,cmd $(pgrep dhclient)

0

Đây là biến thể của tôi (rất giống với của bạn):

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

1116 - giây sau khi thuê IP.


0

Điều này sẽ làm những gì bạn muốn, trong vài giây:

#!/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!"

Đầu ra nào:

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!

Lý thuyết: Nhận dấu thời gian STARTTIME, sau đó kiểm tra INTERVALxem liệu cổng (thông qua ip route show) có còn hoạt động không, nếu vậy, hãy trừ dấu thời gian hiện tại khỏi bản gốc và in. Nếu không, thoát và chỉ ra rằng máy chủ đã ngắt kết nối. Xem các trang hướng dẫn để giải thích từng tùy chọn lệnh. Nếu bạn không muốn đầu ra mỗi giây, hãy tăng INTERVAL.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.