Wie kann ich zuverlässig überprüfen, wann eine Ubuntu-Maschine das letzte Mal mit dem Internet verbunden war?

24

Wie kann ich zuverlässig überprüfen, wann eine Ubuntu-Maschine das letzte Mal mit dem Internet verbunden war?

Falls dies nicht möglich ist, ist es ausreichend, zu überprüfen, wann ein Ubuntu-Computer zum letzten Mal mit einem Netzwerk verbunden wurde.

kos
quelle

Antworten:

28

Methode 1

Obwohl NetworkManager.conf die Protokollierung zulässt, wird dies anscheinend immer noch in syslog gespeichert. Kern.log hat es jedoch auch.

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

Methode 2

Ich habe festgestellt, dass NetworkManager die letzte Verbindungszeit speichert und sie in /var/lib/NetworkManager/timestampsDateien im Zeitformat der Unix-Epoche (Sekunden seit 1970) sortiert . Meins sieht zum Beispiel so aus:

$ 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

Den neuesten Eintrag anzeigen

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

Awk sucht nach der größten Epochenzeit (mit anderen Worten nach der neuesten) und das Datum konvertiert sie in eine für Menschen lesbare Form.

Ich vermute auch, dass diese Datei ( /var/lib/NetworkManager/timestamps) vom grafischen Menü "Verbindungen bearbeiten" verwendet wird, um das letzte Mal der Verbindung anzuzeigen

Bildbeschreibung hier eingeben

Das Problem ist, dass, wenn Sie immer noch mit einem Access Point verbunden sind, die GUI-Methode nicht anzeigt, nowwann die Verbindung zuletzt hergestellt wurde

Sergiy Kolodyazhnyy
quelle
Wo finde ich die Datei? :) Prüft dies auch, wann das Gerät das letzte Mal mit dem Internet verbunden war oder wann das Gerät das letzte Mal mit einem Netzwerk verbunden war? Funktioniert das danach noch?
Kos
@kos anscheinend geht das noch ins syslog. Ich werde ein bisschen mehr recherchieren und wenn ich etwas finde, aktualisiere ich meine Antwort.
Sergiy Kolodyazhnyy
Ok, ich habe nachgesehen man NetworkManager.conf, die Datei ist /etc/NetworkManager/NetworkManager.conf; Dies funktioniert erst, nachdem die Anmeldung im Dämon aktiviert wurde. Leider muss ich dies anschließend überprüfen, sofern der Computer nicht dafür konfiguriert wurde. Wie auch immer +1 für die kern.logLösung und für die erste Lösung, die in anderen Fällen hilfreich sein könnte
kos
2
@kos Diese Datei enthält also hex-string = epoch-timestamp. Hex-Strings sind Zugangspunkte. Epochen-Zeitstempel sind die letzten Verbindungszeitpunkte. Versuchen Sie meine awk-Version dort, ich habe meine Antwort bearbeitet
Sergiy Kolodyazhnyy
2
@DeadChex Ich war um ein Jahr weg :) Bereits korrigiert
Sergiy Kolodyazhnyy
6

Sie können die Datei überprüfen, die /var/log/syslogangezeigt wird, wenn Sie das letzte Mal eine Verbindung zu einem Netzwerk hergestellt haben.


Beispiel

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

Sie können einen grep- Befehl ausführen , um nur das abzurufen , was Sie aus dem Protokoll benötigen

< /var/log/syslog grep DHCPREQUEST 
Mark Kirby
quelle
1
+1, in der Hoffnung immer noch nach einer Möglichkeit zu suchen, um zu überprüfen, wann die letzte Verbindung zum Internet hergestellt wurde. Wenn heute nichts passiert, akzeptiere ich diese Antwort. Ich möchte Ihnen jedoch eine etwas benutzerfreundlichere Lösung wie < /var/apt/syslog grep DHCPREQUESToder Variationen vorschlagen .
Kos
1
DHCPREQUESTist nicht zuverlässig. Ich bin seit dem Nachmittag online und hatte viele DHCP-Anfragen.
AB
@Kos du scheinst aus Versehen apt anstelle von log in deinen Kommentar gesetzt zu haben.
Sri
@ Sri In der Tat war das ein Ausrutscher. Zum Glück ist OP nicht darauf hereingefallen!
Kos
5

Überprüfen Sie, CONNECTED_GLOBALnachdem wir gefunden haben , link connectedin/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
quelle
Es gibt keine Notwendigkeit für sudodie erste, aber keine davon funktioniert, ich denke, es liegt an der POSIXly [[:space:]]. Welche Version von awkläufst du?
Kos
@kos Ups, sudoentfernt. GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)
AB
Ok, jetzt funktioniert es :). +1
kos
@kos Ich brauche meine %;) Wenn es eine Ausgabe in der Zeile unten gibt
AB
1
Ich mag es nicht %. Alles außer das ist perfekt!
Helio
2

Wenn Sie nicht den "richtigen" Weg finden, können Sie immer Ihren eigenen herstellen!

Die folgende Bash-Funktion zeigt an, ob Sie online sind (im Internet) oder nicht.

Sie müssten lediglich ein Skript schreiben, das es aufruft (in einer Schleife und dann im Ruhezustand) und das letzte Datum und die letzte Uhrzeit in einer Datei aufzeichnet (überschreibt, sodass es nur den neuesten Wert hat).

Sie müssten der Schleife Code hinzufügen, damit diese beim ersten Aufruf überprüft und protokolliert wird (damit Ihr Anfangszustand korrekt festgelegt wird).

Danach würden Sie sich erst wieder anmelden, wenn der Status zum ersten Mal offline geschaltet wird und wenn er zum ersten Mal online geschaltet wird, nachdem er offline geschaltet wurde. Es ist einfacher zu programmieren als zu erklären. ;)

Die Genauigkeit wird dadurch eingeschränkt, wie lange Sie eine Verzögerung (Ruhezustand) in der Schleife verwenden (um zu verhindern, dass es sich um eine sehr enge Schleife handelt, die möglicherweise zu viele Systemressourcen verbraucht). Außerdem ist nicht bekannt, was passiert, bevor die Schleife gestartet wird oder wenn es nicht läuft.

Das Skript selbst kann ( &am Ende des Aufrufs) als Hintergrundjob gestartet werden , möglicherweise mit einemnohup , der ausgeführt wird, wenn der übergeordnete Prozess beendet wird), wenn sich Ihr Benutzer anmeldet, indem er es aus Ihrer $ HOME / .profile-Datei ausführt. Starten Sie es mit Ihrem Desktop-Autostart-Dienstprogramm (KDE oder Gnome), von einem Cron-Job aus, der regelmäßig prüft, ob es noch nicht ausgeführt wird, oder sogar von einem beliebigen Startsystem aus (init / systemd / etc.), wenn Sie über ausreichende Kenntnisse verfügen Das.)

Wenn Sie so etwas nicht finden können, das genau das tut, was Sie wollen, ist es oft nicht zu schwierig, ein eigenes Skript zu schreiben, um es wie einen Daemon im Hintergrund auszuführen.

Es ist am besten, es von einem normalen Benutzerkonto aus auszuführen, sofern Sie es nicht in einer robusten Sprache wie C oder Python codieren, da Shell-Skripte, die mit Root-Rechten ausgeführt werden, häufig Sicherheitsrisiken bergen.

Dieser Ansatz hat ein anderes Problem. Manchmal gibt ein Ping-Timeout einen falschen Offline-Status aus.

Ich habe ein vollständiges Skript, " offline_alert" , das so ziemlich das Gegenteil von dem tut, was Sie wollen - benachrichtigt mich, wenn ich offline gehe -, aber der Code kann sich als nützlich erweisen. Es hat eine bessere Offline-Funktion, mit der versucht wird, durch Ping-Zeitüberschreitungen verursachte Fehlalarme zu reduzieren.

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
quelle
2

Eine Möglichkeit zum Überprüfen von Dienst- / Dämonprotokollen, die über das Internet zur Arbeit weitergeleitet werden. Zum Beispiel NTP-Updates (Network Time Protocol).

Siehe dpkg -L ntpdateNetzwerkstatus-Hooks

Nun, ich habe sein Protokoll auf Ubuntu-Desktop überprüft, sein Update wird ausgeführt, wenn das Netzwerk hochgefahren ist, und ich versuche es nach einer kurzen Verzögerung, wenn das letzte Update fehlschlägt. Es verbindet ntp.ubuntu.com.

(Hinweis: Ich habe die erste Spalte in der Ausgabe für meine Kommentare hinzugefügt.)

$ 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

Ich bestätige, dass es standardmäßig für Ubuntu 14.04 LTS 64Bit Desktop- und Server-Editionen installiert ist.

Ich habe es in VM ausprobiert. Es wird nur angezeigt, wann eine Verbindung hergestellt oder eine erneute Verbindung hergestellt wird (mit verfügbarem Internet). Nicht das, was Sie wollen (das letzte Mal wurde verbunden)

Beachten Sie, dass syslog ein rotierendes Protokoll ist. Wenn Sie alle Protokolle durchsuchen möchten, auch alte, komprimierte, verwenden Sie zgrep

zgrep -ih ntpdate /var/log/syslog* | sort -bn -k2
user.dz
quelle
Das sieht gut aus. Können Sie jedoch bestätigen, dass dies zumindest auf Ubuntu Desktop standardmäßig aktiviert ist? Ich kann es momentan nicht persönlich testen, aber ich werde es morgen tun
kos
1
Lösche es nicht, es ist nützlich und gut für meinen Bereich. Wenn ich verstanden habe, dass dies das letzte Mal gemeldet wird, wenn eine (mehr oder weniger) dauerhafte Verbindung hergestellt wurde, wird dies gemeldet, wenn ich das Gerät beispielsweise 2 Tage lang verbunden lasse Datum und Uhrzeit der letzten Verbindung (dh 2 Tage zuvor) richtig? Was passiert als letztes, wenn jemand die Verbindung zum Netzwerk trennt und die Verbindung beispielsweise 5 Minuten später wieder herstellt? Läuft die NTP-Prüfung erneut? Oder gibt es nach der letzten NTP-Prüfung einen Schwellenwert, bevor eine neue NTP-Prüfung durchgeführt wird?
Kos
1
@kos ntpdatewird standardmäßig installiert, nicht jedoch ntpd/ openntpddaemon / service, das in separaten Paketen geliefert wird . Trennen Sie die Verbindung und stellen Sie sie wieder her, um zu überprüfen, ob Uhrzeit und Datum falsch eingestellt sind.
user.dz
1
@kos, ntpdatekann verwendet werden cron, um die Zeit in regelmäßigen Abständen zu aktualisieren. Es führt zu denselben Ergebnissen wie ein Dienst (ntpd / openntpd). Aber Sie suchen nach einer Standardkonfiguration und keiner zusätzlichen Optimierung, oder?
user.dz
1
Entschuldigung, ich habe falsch gelesen. Ja, ich habe nach etwas gesucht, das auf einem nicht konfigurierten Computer verwendet werden kann. Ok, das funktioniert bei mir, ich lasse die Frage trotzdem offen, vielleicht kommt jemand mit einer Killer-Antwort. Vielen Dank! Es ist ein großer Schritt vorwärts. Wie auch immer, diese Protokolle drehen sich hart, vielleicht möchten Sie das zu Ihrer Antwort hinzufügen.
Kos