我正在寻找一种方法将 Linux 主机的在线/离线状态记录到本地日志文件中。
我尝试使用ping
它,但它没有记录超时/丢弃的包,它只显示成功的传输:
ping -D 8.8.8.8 | awk 'NR>1 { printf strftime("%c", $0) "%s",$2; }' RS=[ FS=]
Mi 14 Okt 2015 13:03:06 CEST 64 bytes from 8.8.8.8: icmp_req=155 ttl=55 time=18.4 ms
Mi 14 Okt 2015 13:03:07 CEST 64 bytes from 8.8.8.8: icmp_req=156 ttl=55 time=18.6 ms
Mi 14 Okt 2015 13:03:08 CEST 64 bytes from 8.8.8.8: icmp_req=157 ttl=55 time=18.4 ms
Mi 14 Okt 2015 13:05:19 CEST 64 bytes from 8.8.8.8: icmp_req=244 ttl=55 time=18.4 ms
Mi 14 Okt 2015 13:05:20 CEST 64 bytes from 8.8.8.8: icmp_req=245 ttl=55 time=18.4 ms
所以我必须仔细查看请求号码来检测离线状态。
有人知道更好的方法吗?或者能说出一个工具吗?
提前致谢。
答案1
已经有很多可用的工具可以做到这一点,比如 Munin、Nagios 等。我不明白为什么要重新发明轮子,但如果你想要一个 shell 解决方案,这里有:
#!/bin/bash
logfile="/var/log/up-or-down.log";
ip_address_for_testing="192.168.1.10";
while [[ true ]]; do
ping -c 5 $ip_address_for_testing;
if [[ $? -eq 0 ]]; then
echo "IP status for ${ip_address_for_testing}: UP" >> $logfile;
else
echo "IP status for ${ip_address_for_testing}: DOWN" >> $logfile;
fi;
sleep 5;
done;
上述示例将向 $ip_address_for_testing 中定义的主机发送 5 个 ECHO REQUESTS,如果一切顺利,它将在 $logfile 中写入它是启动还是关闭。如果您想在启动时启动它,请将其保存到文件中,使用 chmod 授予其执行权限,并通过 /etc/rc.local 或 /etc/rcS.d 调用它(如果您选择第二个选项,则必须将其保存在 /etc/init.d 中并为其创建符号链接)。
再见!