我有一台Ubuntu计算机和一台Debian计算机。
在两者上,我都希望能够看到网络接口已连接了多长时间。(也就是说,连接到获取IP等的网络。不是电缆的物理状态)。自上次更改以来的正常运行时间(以秒或日期为单位)或类似时间。
到目前为止,我已经编写了一个小脚本来执行此任务,但是似乎应该有一种更通用的方法来检查此问题。程序或/ proc之类的东西。
我的剧本:
#!/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
除了具有物理电缆连接之外,没有“连接到网络”之类的东西。将IP地址分配给NIC并不表示网络状态。如果要确定NIC的网络连接,则必须主动对其进行监视(例如,通过向其他目标定期发送ping命令或建立持久的TCP连接)。
—
Der Hochstapler
嗯,好了,当我的路由器重启时(大约需要1分钟),我的NIC的IP已被删除,然后重新分配(byt NetworkManager)。我的iMac做类似的事情。我真正想知道的是路由器何时重启。在我的iMac和linux的日志中,我可以看到何时再次对其进行了重新分配,但是我想如果没有NetworkManager之类的东西,它仍然会分配IP?也许我应该仔细看看NetworkManager。谢谢。
—
StefanLithén13年
我假设 NetworkManager(或另一个组件)对活动连接执行监视。如果连接断开,它将确定网关(路由器)的可用性,一旦检测到连接已断开,它可能会释放通过DHCP分配的IP地址。或者,它等待网关再次可用,然后请求重新分配IP地址。无论哪种方式,此问题都建议使用
—
Der Hochstapler
ip monitor
(除其他外),值得一看。
也许放置脚本
—
Der Hochstapler
/etc/dhcp3/dhclient-enter-hooks.d/
也可能是一种选择。但是我找不到足够的信息来说明其工作原理。
如果路由器重新启动,则可能需要查看其对网络产生的影响。当我断开电缆连接时,我的NAS会发出一系列的哔哔声。现在,它有一条交叉电缆将其插入服务器。如果我重新启动服务器,则NAS会丢失链接并产生噪音。根据您的描述,您实际上并不关心IP数据包,也不关心电缆是否已插入计算机的NIC端口,但是您确实想了解链接。可以使用称为Media Sense的技术进行检测。(该功能通常也称为“媒体状态”。)尝试记录对此的更改。
—
TOOGAM 2015年