Forums Neueste Beiträge
 

Standby/Hibernate-L

03/09/2011 - 10:29 von G | Report spam
Hallo,

ich nutze auf Desktop-Computern z.Z. Ubuntu mit Gnome und suche nach
einer Lösung, die meine Computer bei Untàtigkeit ins Hibernate schickt.
Das klingt zunàchst einfach, doch ich möchte u.a. vor Eintreten des
Hibernate feststellen, ob
* Der Benutzer untàtig war (bezogen auf Maus/Tastatur)
* Die Systemlast einen vorgegebenen Wert unterschreitet
* Die IO-Last einen vorgegebenen Wert unterschreitet
* Die Netzwerk-Last einen vorgegebenen Wert unterschreitet
* Keine vorprogrammierten Prozesse laufen (z.B. screen, run-parts)
und all dieses zu zwei Zeitpunkten im Abstand von x Minuten eintritt.
Erst dann soll Energie gespart werden.

Ich wollte ursprünglich ein kleines bash-Skript schreiben, habe damit
aber ein Problem. Der Grund ist, das es mir nicht als root gelingt
abzufragen, ob der Bildschirmschoner bei einem User aktiv ist (wegen der
Abfrage Maus/Tastatur). Alle anderen Bedingungen würden sich über Befehle
regeln lassen.

Habt ihr eine Idee oder etwas im Einsatz?

Grüße!
 

Lesen sie die antworten

#1 Christoph Mehdorn Weber
31/01/2012 - 02:52 | Warnen spam
Hallo!

* Günther Frings :

ich nutze auf Desktop-Computern z.Z. Ubuntu mit Gnome und suche nach
einer Lösung, die meine Computer bei Untàtigkeit ins Hibernate schickt.



Interessante Idee, wenn auch für mich wahrscheinlich nicht
brauchbar (zumindest nicht ohne Wake-on-LAN, da ich hàufiger mal
eine halbe Stunde unterwegs bin und danach den Computer aber aus
der Ferne nutzen mag).

Das klingt zunàchst einfach, doch ich möchte u.a. vor Eintreten des
Hibernate feststellen, ob
* Der Benutzer untàtig war (bezogen auf Maus/Tastatur)



Sollte man halbwegs verlàßlich mit 'w' bzw. 'who' herausfinden
können.

* Die Systemlast einen vorgegebenen Wert unterschreitet



Hm, in einem Script benutze ich:
| NOTIDLE=`vmstat 1 | head -n 4 | tail -n 1 | awk '{ print $15 }'`

Das holt den prozentualen Idle-Wert. Ist aber irgendwie hàßlich.
Und andererseits hat die Load nicht unbedingt viel mit der
Prozessorauslastung zu tun, da sie z.B. auch durch langsame
Platten wachsen kann.


An andere Stelle benutze ich:
| CPUS="$(grep -c processor /proc/cpuinfo)"
| read UPTIME IDLE < /proc/uptime
| echo 'scale=1; val = 100*'"$IDLE/$CPUS/$UPTIME"'; print val, "%"' | bc

Das bezieht sich allerdings auf die Gesamtlaufzeit des Systems.


An noch anderer Stelle:
| if uptime | grep --quiet 'load average: 0\.[0-3]'; then
| if tty --silent; then
| echo 'idle'
| fi
| exit 0
| else
| if tty --silent; then
| echo 'not idle'
| fi
| exit 1
| fi

Letzteres könnte möglicherweise am besten für dich passen. Bei
mir ist das der relevante Teil eines Script namens 'isidle', sagt
bei einer Load von 0.0 bis 0.3 'idle' (sofern Terminal und nicht
etwa Cronjob) und kann in anderen Scripten so benutzt werden:

| if isidle; then mach irgendwas; fi


* Die IO-Last einen vorgegebenen Wert unterschreitet



Die ist in der Systemlast mit drin, sofern du nicht irrtümlich
die CPU-Last (siehe vmstat-Beispiel) meintest. Zum gezielten
ermitteln weiß ich gerade nichts, aber in dem Paket (hab ich
mangels Kernel-Support nicht installiert), daß auch 'ionice'
enthàlt, könnte was drin sein.

* Die Netzwerk-Last einen vorgegebenen Wert unterschreitet



Da wüßte ich gerade nichts, abgesehen von regelmàßige Polling
aller relevanter Schnittstellen und Auslesen von 'RX bytes' sowie
'TX bytes' nebst entsprechendem Vergleich.

Wobei, bei Spezialfàllen wie etwa PPP gab es IIRC entsprechende
Accounting-Schnittstellen.


* Keine vorprogrammierten Prozesse laufen (z.B. screen, run-parts)



Dies könnte man ggf. über die Existenz von entsprechenden
Lockfiles prüfen, und wenn man die Anlegung notfalls mit
/etc/cron.daily/00lockfilecreate und zzlockfiledelete einbauen
muß. Alternativ 'pgrep', wenn die Prozeßnamen bekannt sind und
nicht in anderem Kontext vorkommen.

Bei mir làuft 'screen' aber quasi stàndig (und wird nur ggf.
gelockt) -- kenne dein Nutzungsprofil nicht, aber das kommt mir
etwas seltsam als Anforderung vor.

und all dieses zu zwei Zeitpunkten im Abstand von x Minuten eintritt.



So àhnlich kontrolliere ich die automatische Abschaltung meines
Routers. Ich lasse den Spaß alle x Minuten laufen und erstelle aus
den Ergebnissen eine Logdatei, die mehr oder minder nur 'Okay'
oder 'Nicht gut' enthàlt, vereinfacht dargestellt mit '0' und '1'.
Tut ca. so:

| # sicherstellen, dass was da ist (wenn auch leer)
| touch "shutdown.log"
| # Logfile rotieren
| mv "shutdown.log" "shutdown.old"
| # Checks ausfuehren, Exitstatus merken
| diverse_checks
| CURRENT="$?"
| # Logfile aktualisieren
| echo "$CURRENT" >> "shutdown.log"
| # aktuell ist shutdown gewollt &&
| # aktueller Wert passt zu vorheriger Aufzeichnung
| if
| test "$CURRENT" = 0 &&
| cmp --quiet "shutdown.log" "shutdown.old"
| then
| # abschalten
| shutdown -h ...
| fi

Variablen hab ich oben mal durch sinngemàße Dateinamen
zurückübersetzt und Pfade wegen der Lesbarkeit weggelassen,
Feinheiten wie 'die erste Stunde durchlaufen' übrigens auch.

Ich wollte ursprünglich ein kleines bash-Skript schreiben, habe
damit aber ein Problem. Der Grund ist, das es mir nicht als root
gelingt abzufragen, ob der Bildschirmschoner bei einem User
aktiv ist



Ist das überhaupt sinnvoll? Angenommen, ein User hat seinen
Bildschirmschoner deaktiviert -- dann würdest du gar nicht
abschalten, obwohl nichts los ist. Das muß nicht einmal Absicht
sein, da viele Videoplayer den Bildschirmschoner von sich aus
deaktivieren, damit man in Ruhe làngere Videos gucken kann. Wenn
man dann aber mal 'Pause' drückt, weil irgendwas ist, und den
Rechner dann vergißt ...

Also ich würde es, wie oben erwàhnt, mit 'w'/'who' versuchen.

Habt ihr eine Idee oder etwas im Einsatz?



Im Zweifel kann ich dir mein Shutdown-Script schicken, aber das
guckt nur, ob noch relevante Clients im Netz unterwegs sind oder
nicht ('diverse_checks'), und den Rest der Logik habe ich
skizziert. Wenn du die Checks entsprechend baust und das
'shutdown' durch 'hibernate' ersetzt, könnte es passen.

Christoph

Wenn ihr nur einen TV-Sender empfangen koenntet, welchen
wuerdet ihr auswaehlen? --
Arte. Keine Werbung, manchmal Monty Python und ab und zu ein
Porno. Und keine Werbung. (Martin Baumann, Michael Hertz)

Ähnliche fragen