Làm cách nào tôi có thể kiểm tra một cách đáng tin cậy lần cuối cùng một máy Ubuntu được kết nối với internet là gì?


24

Làm cách nào tôi có thể kiểm tra một cách đáng tin cậy lần cuối cùng một máy Ubuntu được kết nối với internet là gì?

Trong trường hợp điều này là không thể, một cách để kiểm tra lần cuối cùng máy Ubuntu được kết nối với mạng là đủ tốt.

Câu trả lời:


28

Phương pháp 1

Mặc dù NetworkManager.conf cho phép đăng nhập, nhưng rõ ràng điều đó vẫn đi vào syslog. Tuy nhiên, kern.log cũng có nó.

grep 'associated' /var/log/kern.log | tail -n1                               
Jun 21 17:08:25 anaconda kernel: [ 4910.819781] wlan1: associated

Phương pháp 2

Tôi thấy rằng NetworkManager lưu trữ thời gian kết nối lần cuối và nó được sắp xếp theo /var/lib/NetworkManager/timestampstệp, ở định dạng thời gian unix (giây kể từ 1970). Của tôi trông như thế này chẳng hạn:

$ cat /var/lib/NetworkManager/timestamps                                       
[timestamps]
c562ac2d-8911-4273-b165-ed1495b28c9a=1432777079
46cfcdd9-d095-418f-acd6-0a7ca282bb9a=0
d81fb3d0-1717-42c0-903d-4622c2381597=1434895707
b0bdefe6-df88-49bb-83d8-154dd21d77d9=1433093286

Để hiển thị mục mới nhất

date --date=@"$( awk -F'=' 'BEGIN {var=0}{if(var<$2) var=$2;} END{print var}' /var/lib/NetworkManager/timestamps )"

Awk sẽ tìm kiếm thời gian kỷ nguyên lớn nhất (nói cách khác là mới nhất) và ngày sẽ chuyển đổi nó thành dạng có thể đọc được.

Tôi cũng nghi ngờ rằng tệp này ( /var/lib/NetworkManager/timestamps) được sử dụng bởi menu đồ họa Chỉnh sửa kết nối để hiển thị lần kết nối cuối cùng

nhập mô tả hình ảnh ở đây

Vấn đề là nếu bạn vẫn kết nối với một điểm truy cập, cách GUI tiếp tục nowkhông hiển thị , thời gian khi kết nối được thiết lập lần cuối


Tôi tìm tập tin ở đâu? :) Ngoài ra, điều này có kiểm tra lần cuối cùng máy được kết nối với internet hay lần cuối cùng máy được kết nối với mạng không? Cuối cùng, điều này có hoạt động sau đó?
kos

@kos rõ ràng là vẫn đi vào syslog. Tôi sẽ nghiên cứu thêm một chút, và nếu tôi tìm thấy thứ gì đó, tôi sẽ cập nhật câu trả lời của mình.
Sergiy Kolodyazhnyy

Ok tôi đã kiểm tra man NetworkManager.conf, các tập tin là /etc/NetworkManager/NetworkManager.conf; điều này sẽ chỉ hoạt động sau khi đã kích hoạt đăng nhập vào daemon, nhưng thật không may tôi cần kiểm tra điều này sau đó giả sử rằng máy chưa được cấu hình cho việc này. Dù sao +1 cho kern.loggiải pháp và cho giải pháp đầu tiên có thể hữu ích trong các trường hợp khác
kos

2
@kos Vì vậy, tệp đó chứa hex-string = epoch-timestamp. chuỗi hex là điểm truy cập. epoch-timestamp là thời gian kết nối mới nhất. Hãy thử phiên bản awk của tôi ở đó, tôi đã chỉnh sửa câu trả lời của mình
Sergiy Kolodyazhnyy

2
@DeadChex Tôi đã nghỉ một năm :) Đã sửa rồi
Sergiy Kolodyazhnyy

6

Bạn có thể kiểm tra tệp /var/log/syslognó sẽ hiển thị lần cuối bạn kết nối với mạng.


Thí dụ

Jun 21 08:00:00 Ubuntu dhclient: DHCPREQUEST of 192.0.0.0 on wlan0 to 192.0.0.0 port 67 (xid=0xec7c6e7)

Bạn có thể chạy lệnh grep để chỉ lấy những gì bạn cần từ nhật ký

< /var/log/syslog grep DHCPREQUEST 

1
+1, vẫn hy vọng có cách kiểm tra lần cuối cùng nó được kết nối với internet. Nếu không có gì xuất hiện trong ngày hôm nay tôi sẽ chấp nhận câu trả lời này. Tuy nhiên, tôi muốn đề xuất cho bạn một giải pháp thân thiện hơn với người dùng, chẳng hạn như < /var/apt/syslog grep DHCPREQUESThoặc các biến thể.
kos

1
DHCPREQUESTkhông đáng tin cậy Tôi trực tuyến từ chiều và vì tôi có rất nhiều yêu cầu DHCP.
AB

@Kos bạn dường như đã đặt nhầm apt vào vị trí đăng nhập bình luận của bạn.
Sri

@Sri Thật vậy, đó là một cú trượt. May mắn thay OP đã không rơi vào điều đó!
kos

5

Kiểm tra CONNECTED_GLOBALsau khi chúng tôi đã tìm thấy link connectedtrong/var/log/syslog

/link connected/,/CONNECTED_GLOBAL/

% awk '/link connected/,/CONNECTED_GLOBAL/ {line=$0} END{print line}' /var/log/syslog
Jun 21 11:12:54 sturm NetworkManager[736]: <info> NetworkManager state is now CONNECTED_GLOBAL Jun 21 11:12:54

% awk '/link connected/,/CONNECTED_GLOBAL/ {month=$1;day=$2;time=$3} END{print month,day,time}' /var/log/syslog
Jun 21 11:12:54

Không có nhu cầu sudotrong lần đầu tiên, tuy nhiên không ai trong số này hoạt động, tôi nghĩ đó là vì POSIXly [[:space:]]. Phiên bản nào awkbạn đang chạy?
kos

@kos Ups, sudogỡ bỏ. GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)
AB

Ok bây giờ nó đang hoạt động :). +1
kos

@kos Tôi cần của tôi %;) Nếu có một đầu ra trong dòng bên dưới
AB

1
Tôi không thích %. Tất cả nhưng điều này là hoàn hảo!
Helio

2

Nếu bạn không tìm thấy cách "đúng" để làm điều này, bạn luôn có thể tự sản xuất!

Hàm bash sau đây sẽ cho bạn biết bạn có trực tuyến (với Internet) hay không.

Bạn chỉ cần viết một tập lệnh gọi nó (trong một vòng lặp và sau đó ngủ) và ghi lại ngày giờ cuối cùng vào một tệp (ghi đè, vì vậy nó chỉ có giá trị mới nhất).

Bạn sẽ phải thêm mã vào vòng lặp để nó kiểm tra ngay khi được gọi ban đầu và ghi nhật ký (để trạng thái ban đầu của bạn được đặt chính xác).

Sau đó, bạn sẽ chỉ đăng nhập lại khi trạng thái đầu tiên ngoại tuyến và khi nó xuất hiện trực tuyến sau khi ngoại tuyến. Viết mã dễ hơn giải thích. ;)

Điều này sẽ bị giới hạn về độ chính xác bởi thời gian trì hoãn (ngủ) mà bạn sử dụng trong vòng lặp (để giữ cho nó không phải là một vòng lặp rất chặt có thể tiêu tốn quá nhiều tài nguyên hệ thống.) Bạn cũng sẽ không biết bất cứ điều gì xảy ra trước khi nó được bắt đầu hoặc khi nó không chạy.

Bản thân tập lệnh có thể được bắt đầu (như một công việc nền ( &ở phần cuối của lệnh gọi), có thể là nohupđể giữ cho nó chạy nếu quá trình cha mẹ của nó kết thúc) khi người dùng của bạn đăng nhập bằng cách chạy nó từ tệp $ HOME / .profile của bạn, bắt đầu với tiện ích tự khởi động máy tính để bàn của bạn (KDE hoặc Gnome), từ một công việc định kỳ kiểm tra định kỳ để xem nó chưa chạy hay thậm chí từ bất kỳ hệ thống khởi động nào bạn có (init / systemd / v.v., nếu bạn biết đủ để làm cái đó.)

Khi bạn không thể tìm thấy thứ gì đó như thế này thực hiện chính xác những gì bạn muốn, thường không quá khó để viết kịch bản của riêng bạn để thực hiện và chạy nó như một daemon trong nền.

Tốt nhất là chạy nó từ tài khoản người dùng thông thường nếu có thể - trừ khi bạn viết mã bằng ngôn ngữ mạnh mẽ như C hoặc Python - vì các tập lệnh shell chạy với quyền root thường gây ra rủi ro bảo mật.

Cách tiếp cận này có một vấn đề khác. Đôi khi một ping sẽ hết thời gian cho bạn một trạng thái ngoại tuyến sai.

Tôi có một tập lệnh đầy đủ, offline_alert , điều này hoàn toàn trái ngược với những gì bạn muốn - thông báo cho tôi khi tôi ngoại tuyến - nhưng mã có thể chứng minh hữu ích. Nó có chức năng ngoại tuyến tốt hơn nhằm cố gắng giảm tích cực sai từ thời gian chờ ping.

function offline {
  ## Test if offline
  ## Returns 0 if online, 2 if offline
  local RC
  ping -c 1 google.com > /dev/null 2>&1
  RC=$?
  ##echo "offline returning [${RC}]"
  return $RC
}

2

Một cách để kiểm tra bất kỳ nhật ký dịch vụ / daemon nào chuyển tiếp trên Internet để hoạt động. Ví dụ cập nhật NTP (Network Time Protocol).

Xem dpkg -L ntpdatecác móc trạng thái mạng

Cũng như tôi đã kiểm tra nhật ký của nó cho máy tính để bàn Ubuntu, bản cập nhật của nó chạy bất cứ khi nào mạng lên và tiếp tục thử sau khi trì hoãn ngắn nếu lần cập nhật cuối không thành công. Nó kết nối ntp.ubuntu.com.

(Lưu ý, tôi đã thêm cột đầu tiên trong đầu ra cho ý kiến ​​của mình)

$ grep -r ntpdate /var/log/syslog*

1st_trial   Jul 14 00:35:56 user-VirtualBox ntpdate[774]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 14 00:35:56 user-VirtualBox ntpdate[774]: no servers can be used, exiting
2nd_trial   Jul 14 03:38:57 user-VirtualBox ntpdate[2571]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 14 03:38:57 user-VirtualBox ntpdate[2571]: no servers can be used, exiting
3rd_trial   Jul 14 03:46:09 user-VirtualBox ntpdate[2782]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 14 03:46:09 user-VirtualBox ntpdate[2782]: no servers can be used, exiting
4th_trial   Jul 14 03:47:48 user-VirtualBox ntpdate[2917]: step time server 91.189.89.199 offset 3.458355 sec
1st_trial   Jul 14 10:23:07 user-VirtualBox ntpdate[728]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 14 10:23:07 user-VirtualBox ntpdate[728]: no servers can be used, exiting
2nd_trial   Jul 14 10:37:22 user-VirtualBox ntpdate[2099]: step time server 91.189.89.199 offset 2.021103 sec
dis-/re-con Jul 14 15:27:09 user-VirtualBox ntpdate[20174]: step time server 91.189.89.199 offset 1.677465 sec
1st_trial   Jul 14 23:55:00 user-VirtualBox ntpdate[807]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 14 23:55:00 user-VirtualBox ntpdate[807]: no servers can be used, exiting
2nd_trial   Jul 15 00:00:24 user-VirtualBox ntpdate[2041]: step time server 91.189.94.4 offset 1.619839 sec
1st_trial   Jul 15 05:39:08 user-VirtualBox ntpdate[767]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 15 05:39:08 user-VirtualBox ntpdate[767]: no servers can be used, exiting
2nd_trial   Jul 15 05:39:21 user-VirtualBox ntpdate[1088]: step time server 91.189.94.4 offset 2.897077 sec
1st_trial   Jul 15 05:49:40 user-VirtualBox ntpdate[787]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 15 05:49:40 user-VirtualBox ntpdate[787]: no servers can be used, exiting
2nd_trial   Jul 15 05:49:50 user-VirtualBox ntpdate[1101]: adjust time server 91.189.94.4 offset 0.090520 sec
reconnect   Jul 15 05:55:50 user-VirtualBox ntpdate[2251]: adjust time server 91.189.94.4 offset 0.261432 sec
reconnect   Jul 15 06:04:53 user-VirtualBox ntpdate[2702]: step time server 91.189.94.4 offset 0.525658 sec

Tôi xác nhận rằng nó được cài đặt theo mặc định cho phiên bản máy chủ và máy tính để bàn Ubuntu 14.04 LTS 64Bit.

Tôi đã thử nó trong VM, nó chỉ hiển thị thời gian nó kết nối hoặc kết nối lại (có sẵn Internet). Không phải những gì bạn muốn (lần cuối được kết nối)

Lưu ý, syslog là nhật ký xoay, nếu bạn muốn tìm kiếm tất cả các nhật ký ngay cả những bản ghi cũ đã nén, hãy sử dụng zgrep

zgrep -ih ntpdate /var/log/syslog* | sort -bn -k2

Điều này có vẻ tốt, tuy nhiên bạn có thể xác nhận điều này được bật theo mặc định ít nhất trên Ubuntu Desktop không? Tôi không thể kiểm tra cá nhân ngay bây giờ, nhưng tôi thực sự sẽ làm điều đó vào ngày mai
kos

1
Đừng xóa nó, nó hữu ích và tốt cho phạm vi của tôi, nếu tôi hiểu điều này sẽ báo cáo lần cuối cùng một kết nối liên tục (ít nhiều) được thực hiện, vì vậy nếu tôi rời khỏi máy được kết nối trong 2 ngày thì nó sẽ báo cáo ngày và thời điểm kết nối cuối cùng được thực hiện, (tức là 2 ngày trước) phải không? Điều cuối cùng, điều gì xảy ra khi ai đó ngắt kết nối mạng và kết nối lại, nói, 5 phút sau? Kiểm tra NTP có chạy lại không? Hoặc có một số loại ngưỡng sau lần kiểm tra NTP cuối cùng trước khi kiểm tra NTP mới được chạy?
kos

1
@kos, đừng nhầm lẫn, ntpdateđược cài đặt theo mặc định nhưng không phải ntpd/ openntpddaemon / dịch vụ đi kèm trong các gói riêng biệt. Để kiểm tra xem bạn thay đổi thời gian và ngày thành sai, hãy ngắt kết nối sau đó kết nối lại.
user.dz

1
@kos, ntpdatecó thể được sử dụng cronđể cập nhật thời gian định kỳ, nó sẽ có kết quả tương tự như khi chạy một dịch vụ (ntpd / openntpd). Nhưng bạn đang tìm kiếm cấu hình mặc định và không có điều chỉnh bổ sung, phải không?
user.dz

1
Xin lỗi, tôi đọc sai. Có, tôi đang tìm kiếm thứ gì đó để sử dụng trên máy không được cấu hình. Ok, điều này làm việc cho tôi, dù sao tôi cũng sẽ để ngỏ câu hỏi, có lẽ ai đó nghĩ ra câu trả lời giết người. Cảm ơn! Đó là một bước tiến tuyệt vời. Dù sao đi nữa, những bản ghi đó xoay vòng khó khăn, có thể bạn muốn thêm nó vào câu trả lời của mình.
kos
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.