Odpowiedzi:
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/timestamps
pliku, 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
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
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.log
rozwiązanie i za pierwsze rozwiązanie, które może być pomocne w innych przypadkach
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
< /var/apt/syslog grep DHCPREQUEST
lub warianty.
DHCPREQUEST
nie jest wiarygodny. Jestem online od popołudnia i ponieważ miałem wiele żądań DHCP.
Sprawdź CONNECTED_GLOBAL
po tym, jak znaleźliśmy link connected
w/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
, jednak żadna z nich nie działa, myślę, że jest to spowodowane POSIXly [[:space:]]
. Którą wersję awk
używasz?
sudo
usunięte. GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)
%
;) Jeśli w wierszu poniżej znajduje się wyjście
%
. Wszystko oprócz tego jest idealne!
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
}
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 ntpdate
haki 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
ntpdate
jest instalowany domyślnie, ale nie ntpd
/ openntpd
daemon / 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.
ntpdate
może być używany cron
do 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?