如何可靠地检查Ubuntu计算机最后一次连接到互联网的时间是什么?


24

如何可靠地检查Ubuntu计算机最后一次连接到互联网的时间是什么?

如果无法做到这一点,那么一种检查Ubuntu计算机上次连接到网络的时间的方法就足够了。

Answers:


28

方法一

即使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不显示,即上次建立连接的时间


在哪里找到文件?:)这还会检查机器最后一次连接到互联网还是机器最后一次连接到网络吗?最后,这个工作以后进行吗?
kos 2015年

@kos显然仍然进入系统日志。我将进行更多研究,如果我发现了什么,我将更新我的答案。
2015年

好吧,我检查了man NetworkManager.conf,文件是/etc/NetworkManager/NetworkManager.conf;只有在启用了守护程序的登录功能后,此功能才能起作用,但是不幸的是,假设尚未为此配置计算机,我需要在此之后进行检查。无论如何,该kern.log解决方案和第一个解决方案+1 可能在其他情况下会有所帮助
kos 2015年

2
@kos该文件包含hex-string = epoch-timestamp。十六进制字符串是访问点。时代时间戳记是连接的最新时间。在那里尝试我的awk版本,我已经编辑了答案
Sergiy Kolodyazhnyy 2015年

2
@DeadChex我离开了一年:)已更正
Sergiy Kolodyazhnyy 2015年

6

您可以检查文件/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 

1
+1,仍然希望能找到一种方法来检查它最近一次连接到互联网的时间。如果今天什么都没发生,我会接受这个答案。但是,我想向您建议一些更人性化的解决方案,例如< /var/apt/syslog grep DHCPREQUEST或。
kos 2015年

1
DHCPREQUEST不可靠。我从下午开始在线,因为我有很多DHCP请求。
2015年

@Kos您似乎错误地将apt替换为登录您的评论。
斯里兰卡

@Sri确实,这是一个失误。幸运的是,OP并没有因此而失败!
kos 2015年

5

检查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您正在运行哪个版本?
kos 2015年

@kos Ups,sudo已删除。GNU Awk 4.1.1,API:1.1(GNU MPFR 3.1.2-p11,GNU MP 6.0.0)
AB

好的,现在它正在工作:)。+1
kos 2015年

@kos我需要我的%;)如果下面的行中有输出
AB

1
我不喜欢%。除了这一切,这都是完美的!
Helio 2015年

2

如果您找不到执行此操作的“正确”方法,则始终可以制造自己的方法!

以下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
}

2

检查在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

看起来不错,但是您是否可以确认至少在Ubuntu Desktop上默认启用了此功能?我现在无法亲自对其进行测试,但我确实会在明天进行测试
kos 2015年

1
不要删除它,它很有用,并且对我的范围很有用,如果我理解这将在上一次建立(或多或少)持久连接时报告,因此如果我将计算机保持连接状态2天,它将报告最后一次建立连接的日期和时间(即前2天)对吗?只是最后一件事,当某人从网络断开并在5分钟后重新连接时会发生什么?NTP检查是否再次运行?还是在最后一次NTP检查之后是否存在某种阈值,然后再运行新的NTP检查?
kos

1
@kos,不要混淆,ntpdate默认情况下会安装,但ntpd/ openntpddaemon / service 不会安装在单独的软件包中。要检查您将时间和日期更改为错误的时间和日期,请断开连接,然后重新连接。
user.dz

1
@kos ntpdate可用于cron定期更新时间,其结果与运行服务(ntpd / openntpd)相同。但是,您正在寻找默认配置并且没有其他调整,对吗?
user.dz

1
对不起,我看错了。是的,我正在寻找要在未配置的计算机上使用的东西。好的,这对我有用,无论如何,我还是把问题悬而未决,也许有人想出了一个致命的答案。谢谢!这是向前迈出的一大步。无论如何,这些日志很难处理,也许您想将其添加到您的答案中。
kos
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.