Jak mogę w wiarygodny sposób sprawdzić, kiedy maszyna Ubuntu po raz ostatni została podłączona do Internetu?

24

Jak mogę w wiarygodny sposób sprawdzić, kiedy maszyna Ubuntu po raz ostatni została podłączona do Internetu?

W przypadku, gdy nie jest to możliwe, wystarczający byłby sposób sprawdzenia, kiedy ostatni komputer Ubuntu był podłączony do sieci.

kos
źródło

Odpowiedzi:

28

Metoda 1

Mimo że NetworkManager.conf pozwala na rejestrowanie, najwyraźniej nadal przechodzi do syslog. Jednak kern.log ma to również.

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

Metoda 2

Odkryłem, że NetworkManager przechowuje czas ostatniego połączenia i jest sortowany w /var/lib/NetworkManager/timestampspliku, w formacie czasu epoki unix (sekundy od 1970 roku). Mój wygląda tak na przykład:

$ 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

Aby wyświetlić najnowszy wpis

date --date=@"$( awk -F'=' 'BEGIN {var=0}{if(var<$2) var=$2;} END{print var}' /var/lib/NetworkManager/timestamps )"

Awk wyszuka największy czas epoki (innymi słowy najpóźniej), a data przekształci go w czytelną dla człowieka formę.

Podejrzewam również, że ten plik ( /var/lib/NetworkManager/timestamps) jest używany przez menu graficzne Edytuj połączenia do wyświetlenia ostatniego połączenia

wprowadź opis zdjęcia tutaj

Problem polega na tym, że jeśli nadal jesteś podłączony do punktu dostępu, sposób GUI ciągle pokazuje now, że nie było, czas ostatniego połączenia

Sergiy Kolodyazhnyy
źródło
Gdzie mogę znaleźć plik? :) Czy to sprawdza również, kiedy urządzenie zostało podłączone do Internetu po raz ostatni, czy kiedy urządzenie było podłączone do sieci? Wreszcie, czy to działa później?
Kos
@kos najwyraźniej nadal wchodzi do syslog. Przeszukam trochę więcej, a jeśli coś znajdę, zaktualizuję swoją odpowiedź.
Sergiy Kolodyazhnyy
Ok sprawdziłem man NetworkManager.conf, plik jest/etc/NetworkManager/NetworkManager.conf ; zadziała to dopiero po włączeniu logowania do demona, ale niestety muszę to później sprawdzić, zakładając, że maszyna nie została do tego skonfigurowana. W każdym razie +1 za kern.logrozwiązanie i za pierwsze rozwiązanie, które może być pomocne w innych przypadkach
Kos
2
@kos Tak więc plik ten zawiera ciąg szesnastkowy = znacznik czasu epoki. ciągi hex są punktami dostępu. Znaczniki czasu epoki są ostatnim czasem połączenia. Wypróbuj moją wersję awk, zredagowałem swoją odpowiedź
Sergiy Kolodyazhnyy
2
@DeadChex Byłem wyłączony o rok :) Już poprawione
Sergiy Kolodyazhnyy
6

Możesz sprawdzić plik /var/log/syslog, który wyświetli się podczas ostatniego połączenia z siecią.


Przykład

Jun 21 08:00:00 Ubuntu dhclient: DHCPREQUEST of 192.0.0.0 on wlan0 to 192.0.0.0 port 67 (xid=0xec7c6e7)

Możesz uruchomić polecenie grep, aby pobrać tylko to, czego potrzebujesz z dziennika

< /var/log/syslog grep DHCPREQUEST 
Mark Kirby
źródło
1
+1, wciąż mając nadzieję na sposób sprawdzenia, kiedy ostatnio był połączony z Internetem. Jeśli dzisiaj nic nie pojawi się, zaakceptuję tę odpowiedź. Chciałbym jednak zasugerować ci nieco bardziej przyjazne dla użytkownika rozwiązanie, takie jak < /var/apt/syslog grep DHCPREQUESTlub warianty.
Kos
1
DHCPREQUESTnie jest wiarygodny. Jestem online od popołudnia i ponieważ miałem wiele żądań DHCP.
AB
@Ko wydaje się, że omyłkowo umieściłeś apt w miejscu logowania w swoim komentarzu.
Sri
@Sri Rzeczywiście, to był poślizg. Na szczęście OP nie zakochał się w tym!
Kos
5

Sprawdź CONNECTED_GLOBALpo tym, jak znaleźliśmy link connectedw/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
źródło
W pierwszym nie ma takiej potrzeby sudo, jednak żadna z nich nie działa, myślę, że jest to spowodowane POSIXly [[:space:]]. Którą wersję awkużywasz?
Kos
@kos Ups, sudousunięte. GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)
AB
Ok, teraz działa :). +1
Kos
@kos potrzebuję mojego %;) Jeśli w wierszu poniżej znajduje się wyjście
AB
1
Nie podoba mi się %. Wszystko oprócz tego jest idealne!
Helio
2

Jeśli nie znajdziesz „właściwego” sposobu na zrobienie tego, zawsze możesz wyprodukować swój własny!

Poniższa funkcja bash powie ci, czy jesteś online (do Internetu), czy nie.

Musisz tylko napisać skrypt, który go wywołuje (w pętli, a następnie śpi) i rejestruje ostatnią datę i godzinę w pliku (nadpisywanie, więc ma tylko najnowszą wartość).

Trzeba będzie dodać kod do pętli, aby sprawdzał, jak tylko zostanie początkowo wywołany, i loguje się (więc stan początkowy jest ustawiony poprawnie).

Następnie logowałbyś się ponownie tylko wtedy, gdy stan po raz pierwszy przechodzi w tryb offline i gdy po raz pierwszy przechodzi w tryb online po przejściu w tryb offline. Łatwiej jest napisać kod niż wyjaśnić. ;)

Dokładność tego byłaby ograniczona przez czas, przez jaki opóźnienie (uśpienie) używane w pętli (aby nie było bardzo ciasną pętlą, która mogłaby zużywać zbyt wiele zasobów systemowych). Byłoby również nieświadome tego, co się stanie przed jego uruchomieniem lub gdy nie działa.

Sam skrypt można uruchomić (jako zadanie w tle ( &na końcu wywołania), ewentualnie za pomocąnohup celu utrzymania go, jeśli proces nadrzędny zakończy się), gdy użytkownik zaloguje się, uruchamiając go z pliku $ HOME / .profile, uruchamianie go za pomocą narzędzia autostart pulpitu (KDE lub Gnome), z zadania cron, które okresowo sprawdza, czy nie jest jeszcze uruchomione, lub nawet z dowolnego systemu startowego (init / systemd / etc., jeśli wiesz wystarczająco dużo, aby to zrobić że.)

Kiedy nie możesz znaleźć czegoś takiego, co robi dokładnie to, czego chcesz, często nie jest zbyt trudno napisać własny skrypt, aby to zrobić i uruchomić go jak demon w tle.

Najlepiej jest uruchamiać go z konta zwykłego użytkownika, jeśli to możliwe - chyba że kodujesz go w solidnym języku, takim jak C lub Python - ponieważ skrypty powłoki działające z uprawnieniami administratora często stanowią zagrożenie bezpieczeństwa.

Podejście to ma inny problem. Czasami ping wygaśnie, dając ci fałszywy status offline.

Mam pełny skrypt, offline_alert , który robi coś wręcz przeciwnego do tego, czego chcesz - ostrzega mnie, gdy przechodzę do trybu offline - ale kod może się przydać. Ma lepszą funkcję offline, która próbuje zmniejszyć liczbę fałszywych alarmów po przekroczeniu limitu czasu ping.

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
}
Joe
źródło
2

Jednym ze sposobów sprawdzenia dowolnego dziennika usługi / demona, który przekazuje do Internetu działanie. Na przykład aktualizacje NTP (Network Time Protocol).

Zobacz dpkg -L ntpdatehaki stanu sieci

Cóż, sprawdziłem jego dziennik na pulpicie Ubuntu, jego aktualizacja jest uruchamiana przy każdym połączeniu z siecią i próbuję po krótkim opóźnieniu, jeśli ostatnia aktualizacja się nie powiedzie. Łączy się ntp.ubuntu.com.

(Uwaga, dodałem pierwszą kolumnę w danych wyjściowych dla moich komentarzy)

$ 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

Potwierdzam, że jest instalowany domyślnie w wersjach na komputery i serwery Ubuntu 14.04 LTS 64Bit.

Próbowałem na maszynie wirtualnej, pokazuje tylko czas połączenia lub ponownego połączenia (z dostępem do Internetu). Nie to, czego chcesz (ostatni raz był podłączony)

Uwaga: syslog jest dziennikiem obrotowym, jeśli chcesz przeszukać wszystkie dzienniki, nawet te stare, skompresowane, użyj zgrep

zgrep -ih ntpdate /var/log/syslog* | sort -bn -k2
user.dz
źródło
Wygląda to dobrze, jednak czy możesz potwierdzić, że jest ona domyślnie włączona przynajmniej na Ubuntu Desktop? Nie mogę przetestować go osobiście teraz, ale ja rzeczywiście zrobić to jutro
kos
1
Nie usuwaj go, jest przydatny i jest dobry dla mojego zakresu, jeśli zrozumiałem, że zgłosi to po raz ostatni (mniej lub bardziej) trwałe połączenie, więc jeśli zostawię maszynę podłączoną na przykład przez 2 dni, to zgłosi data i godzina ostatniego połączenia (tj. 2 dni wcześniej), prawda? Ostatnia rzecz, co się stanie, gdy ktoś rozłączy się z siecią i ponownie, powiedzmy, 5 minut później? Czy kontrola NTP uruchamia się ponownie? Czy może istnieje jakiś próg po ostatniej kontroli NTP przed uruchomieniem nowej kontroli NTP?
Kos
1
@kos, nie daj się pomylić, ntpdatejest instalowany domyślnie, ale nie ntpd/ openntpddaemon / service, który jest dostarczany w osobnych pakietach. Aby sprawdzić zmianę czasu i daty na niewłaściwą, odłącz, a następnie podłącz ponownie.
user.dz
1
@kos, ntpdatemoże być używany crondo okresowej aktualizacji czasu, będzie miał takie same wyniki jak uruchomienie usługi (ntpd / openntpd). Ale szukasz domyślnej konfiguracji i żadnego dodatkowego strojenia, prawda?
user.dz
1
Przepraszam, źle odczytałem. Tak, szukałem czegoś do użycia na nieskonfigurowanym komputerze. Ok, to działa dla mnie, i tak zostawię pytanie otwarte, może ktoś wpadnie na morderczą odpowiedź. Dzięki! To wielki krok naprzód. W każdym razie pamiętaj, że te dzienniki obracają się mocno, może chcesz dodać to do swojej odpowiedzi.
kos