PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Standby nach Inaktivität



astrakid
26.03.12, 21:33
Hi,
in einem anderen Topic wurde mir bereits geholfen, Debian auf einem USB-Stick zu installieren und davon zu starten, obwohl der Laptop keine USB-Sticks als Bootmedien akzeptiert.
Nun geht es zum nächsten Schritt: Da der Laptop als Heimserver nur bestimmte Funktionen (FileServer, Asterisk, Medienplayer) übernimmt und möglichst sparsam sein soll, möchte ich ihn bei Inaktivität in den Standby schicken.

Aktuell übernimmt einen Teil dieser Funktionen ein Windows-Laptop. Zum Aufwecken muss ich leider ein MagicPacket schicken, was nicht ganz so schick ist, aber momentan noch geht. Mit weiteren Funktionen (speziell Asterisk) wird das so nicht mehr möglich sein, aber das ist ein weiteres Thema.

Zunächst suche ich nun etwas, um den Rechner gezielt schlafen zu legen, wenn bestimmte Bedingungen nicht mehr zutreffen. Unter Windows nutze ich dafür noch "AutoShutdownManager", ein super Tool. Dort kann ich alles mögliche definieren, was den shutdown-timer zurücksetzt.

So etwas suche ich nun für Debian auf Konsolenebene.
Die folgenden Bedingungen sollten den Timer zurücksetzen:
- VLC spielt aktiv eine Datei ab
- Asterisk ist aktiv (Netzwerklast über 20KB/s für die letzten 60s)
- Timer soll irgendwas zwischen 5 und 10 Minuten sein.

Momentan weiß ich nicht mal, wie ich überhaupt einen "sensitiven" Timer einschalte (wie bei Windows "standby nach x Minuten Inaktivität).
Hat hier einer einen guten Link?

gruß und danke,
astrakid

DrunkenFreak
26.03.12, 22:42
Das einfachste wäre ein Skript. Überprüfen, ob VLC läuft, wenn ja -> exit, wenn nein überprüfen, ob in den letzten 5 Minuten xMB übertragen wurden, wenn nein -> sleep.

zyrusthc
27.03.12, 01:37
Hier mal ne Idee: Setzt allerdings vnstat vorraus.

#!/bin/sh
vlccheck=$(pidof vlc)
currenttraffic=$(vnstat -tr | grep tx | awk '{ print $2 }' | sed -e 's/.\{3\}$//')

if [ "$vlccheck" ] ; then
echo "VLC is running..."
exit
else
echo "VLC is not running..."
# Abfrage ob mehr wie 500kbit/sec gerade gesendet werden
if [[ "$currenttraffic" > 500 ]] ; then
echo "Netzwerkverkehr zu hoch, eventuell Verfügbarkeit benötigt!"
exit
else
# Läuft also VLC nicht und es werden gerade weniger als 500kbit/sec über die Netzwerkschnittelle gesendet geht er in Standby
echo 3 > /proc/acpi/sleep
fi
fi
Greeez Oli

astrakid
27.03.12, 09:59
Vielen Dank für das Skript, das ist eine hervorragende Vorlage.
Werde mir das mal anschauen und noch um einen Timer erweitern, damit der Rechner nicht im worst case alle paar Sekunden anspringen muss. Nach 5 Minuten Leerlauf kann er dann ausagehen.

Wie würdet ihr das mit dem Timer realisieren? Eine Idee wäre, eine Flag-Datei zu erstellen und auf das Alter zu prüfen, aber dann habe ich bei jeder Aktivität einen Schreibzugriff, was ich nach Möglichkeit vermeiden möchte, weil das System auf einem USB-Stick läuft. Ist zwar nicht allzu dramatisch, aber wäre schön.

Ich könnte mir vorstellen, dass ich alle 5 Minuten ein Script aufrufe, in dem alle Bedingungen überprüft werden und der Status jeder Bedingung in Variablen gespeichert wird.
Nach Prüfung aller Bedingungen prüfe ich, ob die Voraussetzung für den Sleep-Zustand gegeben ist.

Auf VLC-PID brauche ich nicht zu prüfen, VLC läuft immer mit http-Interface, um die Remote-Steuerung zu gewährleisten... Kann ich die Aktivität anders abfragen? Z.B. die Last des Prozesses? Im Leerlauf dürfte die Last unter 2% liegen, im Betrieb vermute ich mal, dass die Last zumindest temporär steigt...

vnstat kann ich problemlos installieren, (denke ich zumindest). Erzeugt der Prozess selbst Last, oder ist das zu vernachlässigen?

gruß und danke vorab!
astrakid

Newbie314
27.03.12, 11:13
System time Kommando... und vergleichen ob N Sekunden abgelaufen sind...

Mit googlen findest du da sicher einiges... (ich verwende Perl, daher kann ich dir "meine" Skriptvarianten nicht groß anbieten...

astrakid
27.03.12, 11:38
dann muss das script aber in einer endlosschleife laufen, damit ich die zeit vergleichen kann. oder die zeit muss in eine datei ausgelagert werden. dann kann ich auch direkt über das Dateialter gehen.

gruß,
astrakid

marce
27.03.12, 11:54
Eine Idee wäre, eine Flag-Datei zu erstellen und auf das Alter zu prüfen, aber dann habe ich bei jeder Aktivität einen Schreibzugriff, was ich nach Möglichkeit vermeiden möchte, weil das System auf einem USB-Stick läuft. Ist zwar nicht allzu dramatisch, aber wäre schön.
Nimm doch eim Ramdisk dafür. Hast Du mit /tmp vermutlich auch schon.

astrakid
27.03.12, 13:01
guter hinweis... wie kann ich erkennen, ob es sich um eine ramdisk handelt? die festplatte ist es definitiv nicht und vom usb-stick könnte es höchstens vom swap-bereich sein... aber swap und tmp sollte doch getrennt voneinander sein, oder?

gruß,
astrakid

zyrusthc
27.03.12, 14:24
Eine Ramdisk erstellt man zb. so:

dd if=/dev/zero of=ramdisk.img bs=1M count=100
mkfs.ext3 ramdisk.img
mount -t ext3 -o loop ramdisk.img /tmp
# Die Befehle ab hier musst du, wenn du das beim Booten tun willst, in ein SysV Init Script schreiben
dd if=ramdisk.img of=/dev/ram0
mount -t ext3 -o loop /dev/ram0 /tmp

Greeez Oli

marce
28.03.12, 06:53
so kompliziert?

was spricht z.B. gegen

ram /data/tmp ramfs defaults 0 0
in der fstab oder gegen tmpfs?

Letzteres findet sich bei vielen Distributionen bereits für tmp oder eines der artverwandten Verzeichnissen...