Я ищу способ локально регистрировать состояние хоста 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 и т. д. Я не понимаю, зачем переделывать колесо, но если вам нужно решение в виде оболочки, вот оно:
#!/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;
Приведенный выше пример отправит 5 ECHO-ЗАПРОСОВ на хост, определенный в $ip_address_for_testing, и если все пойдет хорошо, он запишет в $logfile, если он запущен или выключен. Сохраните его в файл, дайте ему права на выполнение с помощью chmod и вызовите его через /etc/rc.local или /etc/rcS.d (если вы выберете второй вариант, вам придется сохранить его в /etc/init.d и создать на него символическую ссылку), если вы хотите запустить его во время загрузки.
Ура!