Wie lese ich die Spalte "IDLE" in der Ausgabe des Linux-Befehls 'w'?


11

Ich versuche, einen Prozess zu finden, der Benutzersitzungen auf einem Remote-Server überwacht und sie benachrichtigt, wenn sie zu lange inaktiv sind, was mit dem Linux-Befehl wangemessen ist.

Das Problem ist - wverwendet 3 verschiedene Formate, um die Leerlaufzeit der Sitzung anzugeben, und ich kann sie nicht richtig herausfinden. Eine Ausgabe von wkönnte folgendermaßen aussehen:

 11:40:57 up 400 days, 10:46, 13 users,  load average: 5.07, 5.10, 4.83
USER     TTY      FROM           LOGIN@   IDLE   JCPU   PCPU WHAT
john     pts/1    XX.XX.XX.XX   Wed13   22:29m  0.13s  0.04s ssh master-db
june     pts/2    XX.XX.XX.XX   Wed13   46.00s  0.67s  0.13s -bash
jenn     pts/4    XX.XX.XX.XX   11:13   27:47   4.16s  0.11s -bash

Wie Sie sehen können, hat IDLE für jeden Benutzer unterschiedliche Formate:

  • "AA.BBs" bedeutet offensichtlich, dass AA Sekunden und BB 1/100 Sekunde (46 Sekunden im Fall von Juni) vergangen sind, seit sie das letzte Mal auf der Konsole aktiv war.
  • "AA: BBm" bedeutet wahrscheinlich, dass AA-Stunden und BB-Minuten vergangen sind, seit John das letzte Mal in seiner Sitzung aktiv war.
  • "AA: BB" ist das Format, das ich nicht herausfinden kann - wie lange ist Jennifer in ihrer Sitzung nicht aktiv?

Antworten:


4

Ohne Qualifikation bedeutet dies MM: SS - also Minuten und ganze Sekunden. Als zusätzlichen Bonus gibt es ein viertes Format, das Sie in dieser Ausgabe nicht haben - eine Anzahl von Tagen (NNdays) Inaktivität.


10

Von der Manpage

Das Standardformat ist DDdays, HH: MMm, MM: SS oder SS.CC, wenn die Zeiten länger als 2 Tage, 1 Stunde bzw. 1 Minute sind.

Ihre Ausgabe ist also MM: SS (> 1 m und <1 Stunde).


1

Nicht ganz die Antwort auf Ihre Frage, aber ein einfacherer Ansatz zur Überprüfung der Leerlaufzeit von Anmeldesitzungen wäre das Betrachten von / dev / pts. Die Änderungszeiten der dort enthaltenen Dateien geben an, wann die Anmeldesitzung zuletzt Eingaben erhalten hat.

Sie sollten in der Lage sein, dort stat-Operationen auszuführen (z. B. stat --format = "% n% X" *) und alles in Sekunden zu halten. Sollte die Berechnung der Zeit erleichtern.


1
Wenn Sie Zeitformate analysieren, möchten Sie möglicherweise nach einer Quelle für diesen Zeitstempel in der Epochenzeit suchen.
cjc

1
Ich habe etwas darüber gelesen, aber ich habe festgestellt, dass die von gemeldeten Leerlaufzeiten wanders sind als die Zeitstempel in den /dev/ptsDateien. Irgendeine Idee warum?
Guss

In welchem ​​Kontext ist es anders? Ich habe mir das nicht genau angesehen, aber "w" muss die Informationen von irgendwoher abrufen, und / dev / pts ist ein offensichtlicher Ort. Ah, vielleicht, wenn etwas auf dem Bildschirm passiert (/ dev / pts / * sollte eine bidirektionale Kommunikation sein); In diesem Fall wäre der Benutzer inaktiv, aber aufgrund eines Vorgangs auf dem Gerät würde beispielsweise / dev / pts / 0 aktualisiert.
cjc

Dies ist eine wahrscheinliche Erklärung und wird mein Schema zunichte machen, da ich inaktive Sitzungen beenden möchte, selbst wenn der Benutzer eine aktive Protokolldatei verfolgt oder verwendet watch.
Guss

1

Die Antwort ist 27 Minuten und 47 Sekunden

  1. Standardformat ist MM: SS.
  2. 22: 29m bedeutet 22 Stunden und 29 Minuten
  3. 46.00s bedeutet 46 Sekunden
  4. 4d bedeutet 4 Tage
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.