Zeitkonto: Verstrichene Zeit schreiben...

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Hallo,

ich werkel gerade an einem Skript, das nach einer vorgegebenen Zeit den PC abschaltet. Damit auch nach einem PC-Absturz die verstrichene Zeit gesichert bleibt, schreibe ich diese 5-sekündlich auf Platte/SSD.

Gäbe es eine Alternative um diese vielen Schreibvorgänge zu umgehen? Oder ist das egal?

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Die vielen Schreibvorgänge sind an sich nichts Schlimmes. Du könntest jedoch alternativ zum Start des Countdowns einmalig die Zielzeit errechnen, zu der sich der Rechner abschalten soll (z.B. `now() + timedelta(hours=2)`) und diese Zielzeit in eine Datei schreiben. So kann dann auch nach einem ungewollten Aussetzer ermittelt werden, wann der Computer sich ursprünglich abschalten sollte und dieses Ziel dann quasi weiter verfolgt werden. Oder ist es so gemeint, dass die Dauer zwischen Absturz und Wiedereinschalten hinten drangehangen werden soll?
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

snafu hat geschrieben:Oder ist es so gemeint, dass die Dauer zwischen Absturz und Wiedereinschalten hinten drangehangen werden soll?
Ja. Nur die Zeit, zu der der Computer auch eingeschaltet ist, soll berücksichtigt werden. Es geht darum, dass täglich eine bestimmte Zeit zur Verfügung steht, während derer der PC genutzt werden kann.

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
BlackJack

@mutetella: Und in diese Zeit kannst Du Abstürze nicht einfach auch einberechnen? Ich meine, wie oft kommt den so ein hoffentlich Ausnahmefall denn vor?
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@BlackJack: Wenn nach dem Absturz gleich wieder gestartet wird, ist das sicher kein Problem. Wenn der PC aber ordentlich heruntergefahren oder in einen Suspend-Mode gesetzt wird, dann soll die Zeit erst wieder nach einem erneuten hochfahren bzw. WakeUp gemessen werden. Suspend Zeiten ließen sich vielleicht ja noch mit einem `pm-utils` Skript lösen, die eingeloggte Zeit mit `uptime` auslesen, aber wenn der PC eben heruntergefahren wird oder abstürzt, habe ich Lücken.
Das ist auch der Grund, weshalb ich ein eigenes Skript schreibe(n muss). Darin wird innerhalb einer Schleife die Zeit gemessen. Tritt ein Suspend-Mode ein, bleibt ja auch die Schleife stehen. Wird der PC heruntergefahren oder stürzt ab, benötige ich nach einem Neustart eben die verstrichene Zeit. Und diese muss laufend geschrieben werden, da sich ein Absturz oder Herunterfahren ja nicht abfangen lässt.

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
BlackJack

@mutetella: Herunterfahren lässt sich „abfangen”. Programme werden dabei ja beendet, und wenn das Programm beendet wird, sollte es auch noch schnell die Zeit „notieren” können.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

BlackJack hat geschrieben:@mutetella: Herunterfahren lässt sich „abfangen”. Programme werden dabei ja beendet, und wenn das Programm beendet wird, sollte es auch noch schnell die Zeit „notieren” können.
Ich verweise diesbezüglich mal auf atexit.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Ok, das ist ja schon mal 'ne Hilfe, danke!

Wenn wir schon dabei sind: Ich konnte bisher noch nichts finden, mittels dessen sich ein `kill $pid` abfangen ließe. Nachdem `signal.signal()` unter anderen ein `SIGKILL` nicht akzeptiert möchte ich fast glauben, dass es auch nicht möglich ist...?

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
BlackJack

@mutetella: ``kill $pid`` sendet ein SIGTERM. Ein SIGKILL kann man in der Tat nicht abfangen. Das ist ja auch der Sinn davon, das man für den absoluten Ernstfall eine Möglichkeit hat einen Prozess zu beenden *ohne* dass der etwas dagegen unternehmen kann. SIGKILL sollte man deshalb auch nicht leichtfertig verwenden sondern erst wenn mindestens ein SIGTERM, und eine angemessene Zeit um darauf zu reagieren, nichts gebracht hat.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@BlackJack: Der Unterschwied zwischen SIGTERM und SIGKILL war mir nicht bewusst. Gut, dass wir darüber geredet haben... :D

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Wenn ich mal raten darf - Du willst den Kiddies die Computerzeit beschränken? ;)
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@jerch: "Beschränken" ist so ein böses Wort... :twisted: Allerdings gibt es neben dem Computer noch Dinge,

"... die 0,0 interessant sind und überhaupt kein Mensch jemals brauchen wird ..." (o-ton Junior).

Ich bin nicht naiv genug zu glauben, durch eine Reglementierung der Computerzeit würde automatisch die Einsicht, sich mit vermeintlich unwichtigen Dingen zu beschäftigen, steigen. Allerdings bin ich auch nicht verantwortungslos genug, den Computer unkontrolliert laufen lassen zu können.

Nachdem mein Junior sein System inzwischen ganz ordentlich überschaut und zumindest Prozesse aufspüren und abschießen kann besteht für mich die Herausforderung darin, mein Skript so weit als möglich abzusichern und ihm ein wenig voraus zu sein... :mrgreen:

mutetella

P. S.: Um ehrlich zu sein, dieses kleine Katz' und Maus Spiel macht uns beiden auch ordentlich Spaß...
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Haha, na dann werd ich evtl Fallstricke nicht weiter ausführen ;)

Nur eine Frage dazu - klemmst Du auch USB-Buchsen ab? :lol:

Und das KILL Problem lässt sich mit entsprechenden Userrechten zumindest eindämmen (User kann keinen Rootprozess killen)
Antworten