Câu trả lời:
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/timestamps
tệ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
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 now
không hiển thị , thời gian khi kết nối được thiết lập lần cuối
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.log
giả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
Bạn có thể kiểm tra tệp /var/log/syslog
nó 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
< /var/apt/syslog grep DHCPREQUEST
hoặc các biến thể.
DHCPREQUEST
khô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.
Kiểm tra CONNECTED_GLOBAL
sau khi chúng tôi đã tìm thấy link connected
trong/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
sudo
trong 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 awk
bạn đang chạy?
sudo
gỡ bỏ. GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)
%
;) Nếu có một đầu ra trong dòng bên dưới
%
. Tất cả nhưng điều này là hoàn hảo!
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
}
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 ntpdate
cá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
ntpdate
được cài đặt theo mặc định nhưng không phải ntpd
/ openntpd
daemon / 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.
ntpdate
có 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?