Как я могу надежно проверить, когда в последний раз машина Ubuntu была подключена к Интернету?
В случае, если это невозможно, достаточно было бы проверить, когда в последний раз машина Ubuntu была подключена к сети.
Как я могу надежно проверить, когда в последний раз машина Ubuntu была подключена к Интернету?
В случае, если это невозможно, достаточно было бы проверить, когда в последний раз машина Ubuntu была подключена к сети.
Способ 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
, время, когда соединение было установлено последним
man NetworkManager.conf
, файл есть/etc/NetworkManager/NetworkManager.conf
; это сработает только после включения регистрации в демоне, но, к сожалению, мне нужно проверить это позже, предполагая, что машина не была настроена для этого. В любом случае +1 заkern.log
решение и за первое решение, которое может быть полезно в других случаяхВы можете проверить файл,
/var/log/syslog
который будет отображаться при последнем подключении к сети.пример
Вы можете запустить команду grep, чтобы извлечь из журнала только то, что вам нужно
источник
< /var/apt/syslog grep DHCPREQUEST
или варианты.DHCPREQUEST
не надежно Я нахожусь в сети с полудня, и так как у меня было много запросов DHCP.Проверьте
CONNECTED_GLOBAL
после того, как мы нашлиlink connected
в/var/log/syslog
/link connected/,/CONNECTED_GLOBAL/
источник
sudo
первом нет необходимости , однако ни один из них не работает, я думаю, что это из-за POSIXly[[:space:]]
. Какую версиюawk
вы используете?sudo
удалено. GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)%
;) Если в строке ниже есть вывод%
. Все кроме этого идеально!Если вы не нашли «правильный» способ сделать это, вы всегда можете изготовить свой собственный!
Следующая функция bash сообщит вам, подключены ли вы (к Интернету) или нет.
Вам просто нужно написать скрипт, который вызывает его (в цикле, а затем спит) и записывает в файл последние дату и время (перезаписывая, поэтому он просто имеет самое последнее значение).
Вам нужно было бы добавить код в цикл, чтобы он проверял, как только он был первоначально вызван, и регистрировал (так что ваше начальное состояние установлено правильно).
После этого вы сможете снова войти в систему только тогда, когда состояние впервые переходит в автономный режим и когда оно впервые появляется в сети после отключения. Проще написать код, чем объяснить. ;)
Это будет ограничено в точности тем, как долго задержка (бездействие) вы используете в цикле (чтобы он не был очень узким циклом, который мог бы потреблять слишком много системных ресурсов.) Он также не знал бы о том, что происходит до его запуска. или когда он не работает.
Сам сценарий может быть запущен (как фоновое задание (
&
в конце вызова), возможно, с помощью функции,nohup
позволяющей сохранить его работоспособность, если его родительский процесс завершается), когда пользователь входит в систему, запустив его из файла $ HOME / .profile, запустите его с помощью утилиты автозапуска рабочего стола (KDE или Gnome) из задания cron, которое периодически проверяет, не запущено ли оно, или даже из какой-либо имеющейся у вас системы запуска (init / systemd / etc., если вы знаете достаточно для этого) что.)Когда вы не можете найти что-то вроде этого, которое делает именно то, что вы хотите, часто не так уж сложно написать свой собственный скрипт для этого и запустить его, как демон в фоновом режиме.
Лучше всего запускать его из учетной записи обычного пользователя, если это возможно - если только вы не кодируете его на надежном языке, таком как C или Python, - потому что сценарии оболочки, выполняющиеся с привилегиями root, часто представляют угрозу безопасности.
У этого подхода есть другая проблема. Иногда пинг прерывается, давая вам ложный статус офлайн.
У меня есть полный скрипт offline_alert , который в значительной степени противоположен тому, что вы хотите - предупреждает меня, когда я выхожу из сети - но код может оказаться полезным. Он имеет лучшую функцию офлайн, которая пытается уменьшить количество ложных срабатываний от истечения времени ожидания.
источник
Один из способов проверить любой сервис / журнал демонов, которые ретранслируют в Интернете для работы. Например, обновления NTP (сетевой протокол времени).
Смотрите
dpkg -L ntpdate
для хуков состояния сетиТак же, как я проверил его журнал для рабочего стола Ubuntu, его обновление запускается при каждом подключении к сети и продолжает пытаться после небольшой задержки, если последнее обновление не удалось. Это соединяет
ntp.ubuntu.com
.(Обратите внимание, я добавил первый столбец в вывод для моих комментариев)
Я подтверждаю, что он установлен по умолчанию для настольных и серверных версий Ubuntu 14.04 LTS 64Bit.
Я попробовал в ВМ, он показывает только время подключения или повторного подключения (при наличии Интернета). Не то, что вы хотите (в прошлый раз был подключен)
Обратите внимание, syslog - это журнал чередования, если вы хотите найти все логи, даже старые сжатые, используйте
zgrep
источник
ntpdate
устанавливается по умолчанию, но неntpd
/openntpd
daemon / service, которая поставляется в отдельных пакетах. Чтобы проверить, что вы меняете время и дату на неправильное, отсоедините и снова подключите.ntpdate
может использоватьсяcron
для периодического обновления времени, оно будет иметь те же результаты, что и запуск службы (ntpd / openntpd). Но вы ищете конфигурацию по умолчанию и никаких дополнительных настроек, верно?