Как я могу надежно проверить, когда в последний раз машина Ubuntu была подключена к Интернету?

24

Как я могу надежно проверить, когда в последний раз машина Ubuntu была подключена к Интернету?

В случае, если это невозможно, достаточно было бы проверить, когда в последний раз машина Ubuntu была подключена к сети.

кос
источник

Ответы:

28

Способ 1

Несмотря на то, что NetworkManager.conf разрешает ведение журнала, он все еще входит в системный журнал Тем не менее, kern.log также имеет это.

grep 'associated' /var/log/kern.log | tail -n1                               
Jun 21 17:08:25 anaconda kernel: [ 4910.819781] wlan1: associated

Способ 2

Я обнаружил, что 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, видимо, все еще входит в системный журнал. Я собираюсь исследовать немного больше, и если я что-то найду, я обновлю свой ответ.
Сергей Колодяжный
Хорошо, я проверил man NetworkManager.conf, файл есть /etc/NetworkManager/NetworkManager.conf; это сработает только после включения регистрации в демоне, но, к сожалению, мне нужно проверить это позже, предполагая, что машина не была настроена для этого. В любом случае +1 за kern.logрешение и за первое решение, которое может быть полезно в других случаях
kos
2
@kos Так что этот файл содержит шестнадцатеричную строку = метка времени. шестнадцатеричные строки являются точками доступа. эпоха-отметки времени являются последним временем соединения. Попробуйте там мою версию на awk, я отредактировал свой ответ
Сергей Колодяжный
2
@DeadChex Я был на один год :) Исправлено уже
Сергей Колодяжный
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или варианты.
Кос
1
DHCPREQUESTне надежно Я нахожусь в сети с полудня, и так как у меня было много запросов DHCP.
AB
@ Так как вы, кажется, ошибочно поставили apt вместо лога в своем комментарии.
Шри
@Sri Действительно, это было промахом. К счастью, OP не влюбился в это!
Кос
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
AB
источник
В sudoпервом нет необходимости , однако ни один из них не работает, я думаю, что это из-за POSIXly [[:space:]]. Какую версию awkвы используете?
Кос
@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 мне нужен мой %;) Если в строке ниже есть вывод
AB
1
Мне не нравится %. Все кроме этого идеально!
Гелио
2

Если вы не нашли «правильный» способ сделать это, вы всегда можете изготовить свой собственный!

Следующая функция bash сообщит вам, подключены ли вы (к Интернету) или нет.

Вам просто нужно написать скрипт, который вызывает его (в цикле, а затем спит) и записывает в файл последние дату и время (перезаписывая, поэтому он просто имеет самое последнее значение).

Вам нужно было бы добавить код в цикл, чтобы он проверял, как только он был первоначально вызван, и регистрировал (так что ваше начальное состояние установлено правильно).

После этого вы сможете снова войти в систему только тогда, когда состояние впервые переходит в автономный режим и когда оно впервые появляется в сети после отключения. Проще написать код, чем объяснить. ;)

Это будет ограничено в точности тем, как долго задержка (бездействие) вы используете в цикле (чтобы он не был очень узким циклом, который мог бы потреблять слишком много системных ресурсов.) Он также не знал бы о том, что происходит до его запуска. или когда он не работает.

Сам сценарий может быть запущен (как фоновое задание ( &в конце вызова), возможно, с помощью функции, nohupпозволяющей сохранить его работоспособность, если его родительский процесс завершается), когда пользователь входит в систему, запустив его из файла $ HOME / .profile, запустите его с помощью утилиты автозапуска рабочего стола (KDE или Gnome) из задания cron, которое периодически проверяет, не запущено ли оно, или даже из какой-либо имеющейся у вас системы запуска (init / systemd / etc., если вы знаете достаточно для этого) что.)

Когда вы не можете найти что-то вроде этого, которое делает именно то, что вы хотите, часто не так уж сложно написать свой собственный скрипт для этого и запустить его, как демон в фоновом режиме.

Лучше всего запускать его из учетной записи обычного пользователя, если это возможно - если только вы не кодируете его на надежном языке, таком как C или Python, - потому что сценарии оболочки, выполняющиеся с привилегиями root, часто представляют угрозу безопасности.

У этого подхода есть другая проблема. Иногда пинг прерывается, давая вам ложный статус офлайн.

У меня есть полный скрипт offline_alert , который в значительной степени противоположен тому, что вы хотите - предупреждает меня, когда я выхожу из сети - но код может оказаться полезным. Он имеет лучшую функцию офлайн, которая пытается уменьшить количество ложных срабатываний от истечения времени ожидания.

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

Один из способов проверить любой сервис / журнал демонов, которые ретранслируют в Интернете для работы. Например, обновления 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.

Я попробовал в ВМ, он показывает только время подключения или повторного подключения (при наличии Интернета). Не то, что вы хотите (в прошлый раз был подключен)

Обратите внимание, syslog - это журнал чередования, если вы хотите найти все логи, даже старые сжатые, используйте zgrep

zgrep -ih ntpdate /var/log/syslog* | sort -bn -k2
user.dz
источник
Это выглядит хорошо, однако можете ли вы подтвердить, что это включено по умолчанию хотя бы на Ubuntu Desktop? Я не могу проверить это лично прямо сейчас, но я действительно сделаю это завтра
Кос
1
Не удаляйте его, это полезно и полезно для моей области, если я понял, что это сообщит в последний раз, когда было установлено (более или менее) постоянное соединение, поэтому, если я оставлю устройство подключенным, скажем, 2 дня, оно сообщит дата и время, когда было установлено последнее соединение (то есть за 2 дня до этого), верно? Последнее, что происходит, когда кто-то отключается от сети и подключается, скажем, через 5 минут? Проверка NTP выполняется снова? Или есть какой-то порог после последней проверки NTP перед выполнением новой проверки NTP?
Кос
1
@kos, не запутайтесь, ntpdateустанавливается по умолчанию, но не ntpd/ openntpddaemon / service, которая поставляется в отдельных пакетах. Чтобы проверить, что вы меняете время и дату на неправильное, отсоедините и снова подключите.
user.dz
1
@kos, ntpdateможет использоваться cronдля периодического обновления времени, оно будет иметь те же результаты, что и запуск службы (ntpd / openntpd). Но вы ищете конфигурацию по умолчанию и никаких дополнительных настроек, верно?
user.dz
1
Извините, я неправильно прочитал. Да, я искал что-то для использования на ненастроенной машине. Ладно, это работает для меня, я все равно оставлю вопрос открытым, может быть, кто-то придумает убийственный ответ. Благодарность! Это отличный шаг вперед. В любом случае, имейте в виду, что эти журналы вращаются жестко, может быть, вы хотите добавить это к своему ответу.
Кос