In python herausfinden ob und wann pc hochgefahren wurde

OP #6863999
Lesenswert?
• ▲
▼
Moin,
ich würd gern wissen wenn jemand meinen PC in meiner Abwesenheit 
hochfährt und wenn ja, für wie lange. Da ich python lern, würd ich das 
gern kombinieren und dort datetime objekte erhalten. Eine eventuelle 
manipulation von logdateien muss nicht berücksichtigt werden. Es geht um 
debian linux falls das wichtig ist.
Man kann sich per bash anscheinend mit "last -x" Zeiten ausgeben lassen 
(z.B. im ISO format) und dann in python parsen, aber bevor ich diese 
Ausgaben auseinanderpflück wollt ich fragen, ob das der richtige Weg 
ist?
Danke und Gruß
Jesse
Gast #6864069
Lesenswert?
• ▲
▼
Jesse J. schrieb:
> ich würd gern wissen wenn jemand meinen PC in meiner Abwesenheit
> hochfährt und wenn ja, für wie lange. Da ich python lern, würd ich das
> gern kombinieren und dort datetime objekte erhalten. Eine eventuelle
> manipulation von logdateien muss nicht berücksichtigt werden. Es geht um
> debian linux falls das wichtig ist.
> Man kann sich per bash anscheinend mit "last -x" Zeiten ausgeben lassen
> (z.B. im ISO format) und dann in python parsen, aber bevor ich diese
> Ausgaben auseinanderpflück wollt ich fragen, ob das der richtige Weg
> ist?

Nunja, Du kannst da viele Dinge tun. Das vielleicht einfachste ist, ein 
Startskript anzulegen und per systemd zu aktivieren, das womöglich 
ungefähr so aussehen könnte:
1
#!/usr/bin/env python
2
import datetime as dt
3

4
if __name__ == '__main__':
5
    now = dt.datetime.now()
6
    # jetzt was mit "now" machen...

Diese Daten könnten dann in eine Logdatei unter /var/log/ eingetragen 
werden, und es ist sicherlich eine gute Idee, dieses Skript unter einer 
separaten Benutzerkennung laufen zu lassen und dafür zu sorgen, daß nur 
dieser Benutzer die Logdatei schreiben und womöglich auch lesen kann. 
Wenn Du noch etwas genauer erklären könntest, was Du wirklich 
bewerkstelligen willst, könnten wir Dir sicherlich auch besser helfen. 
;-)
#6864119
Lesenswert?
• ▲
▼
Die Frage ist: worum geht es?

Wenn Fingerübung für Python: mach – löse das Problem auf möglichst viele 
verschiedene Arten. Vom Parsen der Ausgabe von last über direkte 
Auswertung der Timestamps in den Logs bis hin zu Scripten, die 
ihrerseits die Timestamps ins Log schreiben. Es ist nicht wichtig, wie 
effzient oder sinnvoll es am Ende ist – alles übt.

Wenn’s aber darum geht, den Rechner zu sichern: nutze Verschlüsselung. 
Dann nutzt auch das Booten via USB-Stick nichts.
#6864146
Lesenswert?
• ▲
▼
uptime schrieb:
> /proc/uptime
>    This file contains two numbers: the uptime of the  system  (sec‐
>    onds), and the amount of time spent in idle process (seconds).

Die Daten sind nicht persistent, so dass die Antwort nicht zur im 
Eingangsbeitrag beschriebenen Aufgabenstellung passt: es soll 
festgehalten werden, ob der Rechner während der Abwesenheit gestartet 
worden ist.
OP #6864154
Lesenswert?
• ▲
▼
Nur_ein_Typ schrieb:
> Wenn Du noch etwas genauer erklären könntest, was Du wirklich
> bewerkstelligen willst, könnten wir Dir sicherlich auch besser helfen

Jack V. schrieb:
> Die Frage ist: worum geht es?

Ich wollte einfach bei Bedarf mir per python auflisten lassen, wann der 
PC die letzten Tage hoch und wieder runter gefahren wurde. In meiner 
Familie sind auch keine Profihacker. :) Es geht mir eher um eine 
Fingerübung als um eine 100% Lösung.

Was ich nicht verstehe...ich habe den String aus dem Log extrahiert und 
kann daraus auch ein datetime objekt erzeugen, aber das scheint UTC zu 
sein (also mit +02:00 suffix). Wenn ich hingegen mit datetime.now() ein 
objekt erzeuge, wird es in lokaler Zeit angezeigt. Ich würde die Zeiten 
aus den ISO strings gerne auch lokal anzeigen, also hab ich folgendes 
versucht:
1
dateiso = datetime.datetime.fromisoformat('2021-10-29T18:30:15+02:00')
2
datelocal = dateiso.replace(tzinfo=datetime.timezone.utc).astimezone(tz=None)
3
datenow = datetime.datetime.now()
4
print(datelocal)
5
print(datenow)

Leider wird da immer noch UTC angezeigt:
1
2021-10-29 20:30:15+02:00
2
2021-10-30 16:10:24.640797

Was mache ich falsch?
Gast #6864156
Lesenswert?
• ▲
▼
https://pypi.org/project/psutil/

https://www.geeksforgeeks.org/python-script-to-check-pc-last-reboot-time/


import psutil
import datetime

# returns the time in seconds since the epoch
last_reboot = psutil.boot_time()

# converting the date and time in readable format
print(datetime.datetime.fromtimestamp(last_reboot))



----



>> Nunja, Du kannst da viele Dinge tun.



https://www.freedesktop.org/software/systemd/python-systemd/journal.html
https://www.freedesktop.org/software/systemd/python-systemd/index.html
Gast #6864163
Lesenswert?
• ▲
▼
> Man kann sich per bash anscheinend mit "last -x" Zeiten ausgeben lassen
> (z.B. im ISO format) und dann in python parsen, aber bevor ich diese
> Ausgaben auseinanderpflück wollt ich fragen, ob das der richtige Weg
> ist?

Ja, ist es.  Wenn du viel Langeweile hast, kannst du dir das auch selbst 
auseinanderfrickeln, siehe "man 5 wtmp".

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.