Як я можу надійно перевірити, який останній раз машина Ubuntu підключена до Інтернету?


24

Як я можу надійно перевірити, який останній раз машина Ubuntu підключена до Інтернету?

Якщо це неможливо, спосіб перевірити останній раз, коли машина Ubuntu була підключена до мережі, був би досить хорошим.

Відповіді:


28

Спосіб 1

Навіть незважаючи на те, що NetworkManager.conf дозволяє вести журнал, це, очевидно, все ще переходить у syslog. Однак 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 epoch (секунди з 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) використовується графічним меню редагування підключень для відображення останнього часу з'єднання

введіть тут опис зображення

Проблема полягає в тому, що якщо ви все ще підключені до точки доступу, то спосіб графічного інтерфейсу не відображається now, час останнього встановлення з’єднання


Де я можу знайти файл? :) Також це перевіряє востаннє, коли машина була підключена до Інтернету чи востаннє, коли машина була підключена до мережі? Нарешті, чи працює це згодом?
kos

@kos, мабуть, все ще переходить у syslog. Я ще трохи досліджу, і якщо щось знайду, я оновлю свою відповідь.
Сергій Колодяжний

Ок, я перевірив man NetworkManager.conf, файл є /etc/NetworkManager/NetworkManager.conf; це буде працювати лише після включення входу в демон, але, на жаль, мені потрібно перевірити це згодом, припускаючи, що машина для цього не була налаштована. У будь-якому разі +1 за kern.logрішення та для першого рішення, яке може бути корисним в інших випадках
kos

2
@kos Отже, цей файл містить hex-string = epoch-timestamp. шістнадцяткові рядки - це точки доступу. епоха-часові позначки - останній час з'єднання. Спробуйте мою версію 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або варіанти.
kos

1
DHCPREQUESTне є надійним. Я в Інтернеті з другого дня, і тому що у мене було багато запитів DHCP.
AB

@Kos ви, здається, помилково помістили apt замість журналу у вашому коментарі.
Шрі

@Sri Дійсно, це було промахом. На щастя, ОП не впало за це!
кос

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

У sudoпершому немає необхідності , проте жодне з них не працює, я думаю, це через POSIXly [[:space:]]. Яку версію awkви працюєте?
kos

@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

@kos мені потрібен мій %;) Якщо в нижньому рядку є вихід
AB

1
Мені не подобається %. Все, окрім цього ідеально!
Геліо

2

Якщо ви не знайдете "правильний" спосіб це зробити, ви завжди можете виготовити свій власний!

Наступна функція bash підкаже, чи ви в Інтернеті (чи в Інтернеті) чи ні.

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

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

Після цього ви знову входите в систему лише тоді, коли стан вперше перейде в режим офлайн і коли він вперше з’явиться в Інтернеті після відключення. Простіше кодувати, ніж пояснювати. ;)

Це буде обмежене точністю тим, скільки часу затримку (сну) ви використовуєте в циклі (щоб не бути дуже тугим циклом, який може споживати занадто багато системних ресурсів.) Також було б невідомо про те, що відбувається перед його запуском. або коли він не працює.

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

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

Найкраще запускати його з звичайного облікового запису користувача, якщо це можливо - якщо ви не кодуєте його на надійній мові, як 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 (Network Time Protocol).

Дивіться 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 для настільних ПК та серверів.

Я спробував це в VM, він показує лише час, коли він підключається або знову підключається (з Інтернетом). Не те, що ти хочеш (востаннє було підключено)

Зауважте, syslog - це журнал обертання, якщо ви хочете шукати всі журнали, навіть старі стислі, використовуйте zgrep

zgrep -ih ntpdate /var/log/syslog* | sort -bn -k2

Це виглядає добре, проте чи можете ви підтвердити, що це включено за замовчуванням хоча б на Ubuntu Desktop? Я не можу перевірити це особисто зараз, але я дійсно зроблю це завтра
kos

1
Не видаляйте його, це корисно, і це добре для моєї сфери, якщо я зрозумів, що це буде повідомляти останній раз (або більш) стійке з'єднання, тому якщо я залишу машину підключеною, скажімо, 2 дні, вона повідомить дата та час здійснення останнього з'єднання (тобто за 2 дні до цього), правда? Останнє, що трапляється, коли хтось відключається від мережі та знову підключається, скажімо, через 5 хвилин? Чи перевіряється знову перевірка NTP? Або є якийсь поріг після останньої перевірки NTP перед запуском нової перевірки NTP?
kos

1
@kos, не заплутайтеся, ntpdateвстановлюється за замовчуванням, але не ntpd/ openntpddaemon / service, який постачається в окремих пакетах. Щоб перевірити, чи змінили час і дату на неправильну, відключіться, а потім знову підключіться.
user.dz

1
@kos, з яким ntpdateможна cronперіодично оновлювати час, він матиме ті ж результати, що й запуск служби (ntpd / openntpd). Але ви шукаєте конфігурацію за замовчуванням і немає додаткової настройки, правда?
user.dz

1
Вибачте, я неправильно прочитав. Так, я шукав щось для використання на не налаштованій машині. Гаразд, це працює для мене, я все одно залишу питання відкритим, можливо, хтось придумає вбивчу відповідь. Спасибі! Це великий крок вперед. У будь-якому випадку майте на увазі, що ці журнали обертаються важко, можливо, ви хочете додати це до своєї відповіді.
kos
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.