Answers:
方法一
即使NetworkManager.conf允许记录日志,显然它仍然进入syslog。但是,kern.log也具有它。
grep 'associated' /var/log/kern.log | tail -n1
Jun 21 17:08:25 anaconda kernel: [ 4910.819781] wlan1: associated
方法二
我发现NetworkManager确实存储了最后的连接时间,并且/var/lib/NetworkManager/timestamps
以Unix纪元时间格式(自1970年以来的秒数)在文件中进行了排序。我的例子如下:
$ 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
显示最新条目
date --date=@"$( awk -F'=' 'BEGIN {var=0}{if(var<$2) var=$2;} END{print var}' /var/lib/NetworkManager/timestamps )"
Awk将搜索最大的纪元时间(换句话说,最晚的时间),并将日期转换为人类可读的格式。
我还怀疑“ /var/lib/NetworkManager/timestamps
编辑连接”图形菜单使用此文件()来显示上次连接时间
问题是,如果您仍连接到访问点,则GUI方式将now
不显示,即上次建立连接的时间
man NetworkManager.conf
,文件是/etc/NetworkManager/NetworkManager.conf
;只有在启用了守护程序的登录功能后,此功能才能起作用,但是不幸的是,假设尚未为此配置计算机,我需要在此之后进行检查。无论如何,该kern.log
解决方案和第一个解决方案+1 可能在其他情况下会有所帮助
您可以检查文件/var/log/syslog
,它将显示您上次连接到网络的时间。
例
Jun 21 08:00:00 Ubuntu dhclient: DHCPREQUEST of 192.0.0.0 on wlan0 to 192.0.0.0 port 67 (xid=0xec7c6e7)
您可以运行grep命令从日志中仅提取您需要的内容
< /var/log/syslog grep DHCPREQUEST
< /var/apt/syslog grep DHCPREQUEST
或。
DHCPREQUEST
不可靠。我从下午开始在线,因为我有很多DHCP请求。
检查CONNECTED_GLOBAL
后,我们发现link connected
在/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
在第一个中不需要,但是这些都不起作用,我认为是因为POSIXly [[:space:]]
。awk
您正在运行哪个版本?
sudo
已删除。GNU Awk 4.1.1,API:1.1(GNU MPFR 3.1.2-p11,GNU MP 6.0.0)
%
;)如果下面的行中有输出
%
。除了这一切,这都是完美的!
如果您找不到执行此操作的“正确”方法,则始终可以制造自己的方法!
以下bash函数将告诉您是否在线(连接到Internet)。
您只需要编写一个脚本来调用它(循环然后休眠),并将最后的日期和时间记录到文件中(覆盖,因此它只有最新的值)。
您必须将代码添加到循环中,以便它在最初被调用并进行日志记录时立即进行检查(因此初始状态已正确设置)。
之后,您仅在状态首次脱机以及脱机后首次联机时才再次登录。编码比解释容易。;)
这将受到精度的限制,因为您在循环中使用了多长时间的延迟(睡眠)(以防止它成为可能占用过多系统资源的非常紧密的循环)。它也不会知道在启动之前发生了什么。或未运行时。
脚本本身可以启动(作为后台作业(&
在调用结束时)),可能使用nohup
当用户通过从$ HOME / .profile文件运行登录时如果父进程终止使其保持运行),从您的桌面自动启动实用程序(KDE或Gnome)启动它,或者从cron作业(它会定期检查它是否尚未运行)启动,或者甚至从您拥有的任何启动系统(init / systemd / etc,如果知道足够的话)启动它那。)
当找不到类似您想要的功能的东西时,编写自己的脚本来完成它并像后台程序一样在后台运行它通常并不难。
如果可能的话,最好从常规用户帐户运行它-除非您使用诸如C或Python之类的强大语言对其进行编码-因为以root特权运行的shell脚本通常会带来安全风险。
这种方法还有另一个问题。有时ping会超时,从而为您提供错误的离线状态。
我有一个完整的脚本offline_alert,它几乎与您想要的功能相反-当我离线时会提醒我-但是代码可能有用。它具有更好的脱机功能,可尝试减少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
}
检查在Internet上工作的任何服务/守护程序日志的一种方法。例如NTP(网络时间协议)更新。
请参阅dpkg -L ntpdate
网络状态挂钩
就像我检查了Ubuntu桌面的日志一样,只要网络连接就可以运行它的更新,如果最后一次更新失败,请在短暂的延迟后继续尝试。它连接ntp.ubuntu.com
。
(注意,我在输出中添加了第一列以发表评论)
$ 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
我确认默认情况下已为Ubuntu 14.04 LTS 64Bit台式机和服务器版本安装了该软件。
我在VM中进行了尝试,它仅显示连接或重新连接的时间(可用Internet)。不是您想要的(上次已连接)
注意,syslog是轮换日志,如果要搜索所有日志,即使是旧的压缩日志,请使用 zgrep
zgrep -ih ntpdate /var/log/syslog* | sort -bn -k2
ntpdate
默认情况下会安装,但ntpd
/ openntpd
daemon / service 不会安装在单独的软件包中。要检查您将时间和日期更改为错误的时间和日期,请断开连接,然后重新连接。
ntpdate
可用于cron
定期更新时间,其结果与运行服务(ntpd / openntpd)相同。但是,您正在寻找默认配置并且没有其他调整,对吗?