Lights-Out für Linux

sia

gesperrt
Registriert
26 März 2015
Beiträge
5.926
Ort
FFM (NSFW)
Hi Leute,

Habe mir mal ein kleines Script gebastelt:
Code:
Expand Collapse Copy
########################################################################
# LIGHTS OUT FOR LINUX (lofl)                                          #
# This script suspends the computer if it's idle for a given period of #
# time. It monitors network activity, logged on users and CPU load.    #
########################################################################


Was haltet ihr davon? Soll als Linux-Alternative zu dienen.
 
  • Thread Starter Thread Starter
  • #3
musv schrieb:
Die 2 Perl-Aufrufe hättest du auch mit sed realisieren können. Gerade beim 2. Aufruf, wo du noch ein sed hinter den Perl-Aufruf hinterherschiebst, hättest du den gesamten Ausdruck in ein sed packen können. Die Regexpressions bleiben ja gleich.
Nicht wirklich, habe mich da stundenlang mit sed abgemüht und die Matches haben einfach nicht wirklich hingehauen...

Statt der if-else-Schachtelungen hättest du auch einfach das Script mit exit 0 verlassen können. Macht den Code kürzer und lesbarer. Also bei Dir:
Code:
Expand Collapse Copy
if [ bedingung ]; then 
else 
  if  [nächste_bedingung ]; then
  else
  fi
fi

Lesbarer ist:
Code:
Expand Collapse Copy
if [ ! bedingung]; then 
  echo "Ich brech ab"
  exit 0
fi

if [ nächste_bedingung ]; then
  mach was
  else 
  will ich nicht
  exit 0
fi
Macht das den Code nicht tatsächlich länger, also zeilenmäßig gesehen?

Und zumindest bei mir hab ich nichts konfiguriert. Aber nach einer bestimmten Idle-Zeit geht das Notebook von selbst in den Standby. Hab aber in den Systemd-Einstellungen nichts dazu gefunden. Ob dabei beachtet wird, ob ein User eingeloggt ist oder eine Netzwerkverbindung besteht, weiß ich nicht.
Hast du da vielleicht nen xfce4-powermanager oder Ähnliches laufen? Selbst wenn, wäre das ja vermutlich eher wenn nach ner gewissen Zeit ohne Benutzereingaben nichts passiert, aber auf nem Server hast du ja eh keine Benutzereingaben...
 
Nicht wirklich, habe mich da stundenlang mit sed abgemüht und die Matches haben einfach nicht wirklich hingehauen...
In Perl bin ich noch nicht ganz so fit. Schreib mal den konkreten Ausdruck / die Bedingung, den du parsen willst. Das sollten wir schon hinbekommen.

Macht das den Code nicht tatsächlich länger, also zeilenmäßig gesehen?
Nein, da du einige Else-Zweige einsparst. Weitere Vorteile der Exit-Points:
  • Flache Hierarchie. Du kommst auf maximal 2-3 Ebenen.
  • Du musst bei einer Abbruchbedingung am Anfang nicht penibel darauf achten, dass die gesamten If-Zweige ordnungsgemäß verschachtelt / abgeschlossen sind.
Dadurch wird der Code stabiler.

Hast du da vielleicht nen xfce4-powermanager oder Ähnliches laufen? Selbst wenn, wäre das ja vermutlich eher wenn nach ner gewissen Zeit ohne Benutzereingaben nichts passiert, aber auf nem Server hast du ja eh keine Benutzereingaben...
Mir schießt grad durch den Kopf, dass ich zwar e16 benutz, im Hintergrund aber den KDE-Powerdevil laufen hab. Insofern nehm ich meine erste Aussage zurück und behaupte das Gegenteil. :)
 
aber auf nem Server hast du ja eh keine Benutzereingaben...
Aber auf einem Server will man nicht, dass dieser herunterfährt, nur weil er gerade mal idle ist.
Da würde mir höchstens der Fall einfallen, dass es sich um mehrere Minions in einer Cloud handelt, die man für z.B. load balancing nutzt und die man nur zuschaltet, wenn sie gerade gebraucht werden. Im "Normalfall" sollte ein Server nicht einfach herunter gefahren werden.
 
Naja, das macht schon Sinn. Grade LightsOut löst das auf Win-Systemen hervorragend. Hier wird auf den Clients ein Tool installiert welches den Server hochfährt wenn ein Client angeschaltet wird. Ist kein Client mehr online und/oder findet kein Netzwerktraffic mehr statt (Schwelle kann definiert werden) versetzt das AddIn den Server in den Standby. Man muss hier ja von einer Home-Lösung ausgehen. Ist in aller Regel ein Fileserver, Downloadclient, Streaming-Server (war ursprünglich mal für den WHS programmiert). Ist keiner zuhause kann der ruhig in den Standby gehen, um Strom zu sparen. Übrigens ein Grund warum ich den WHS immer noch nicht durch OMV oder ähnliches ersetzt habe. Das Ganze funktioniert einfach hervorragend.

Spar.PNG

Config.PNG

Das das Ganze gut funktioniert sieht man an der Messung. Die Grundlast von knapp 14W sind ein RPI, ein Switch, ein Gateway und ein Drucker. Beim steigenden Peak habe ich den WHS gestartet, da braucht er rund 60W, im Idle braucht er denn etwa 40W.

Messung.PNG

@TE: Danke für das Script, ich schau mir das bei Gelegenheit mal an.
 
Grade LightsOut löst das auf Win-Systemen hervorragend.
Deine Erklärung ist nachvollziehbar.

In meinem Fall ist der Sinn für das Script nicht gegeben. Ich hab eine Nas (Zyxel NSA-325), auf dem ein Arch installiert ist (originale Firmware runtergeschmissen). Alle Dienste, die nicht rechenintensiv sind und im Heimbereich benötigt werden, kann das Ding genauso gut wie z.b. der WHS. Dabei braucht das Zyxel-Teil im Normalbetrieb nur 6 Watt laut Strommessgerät. Das ist weniger als bei meiner Fritzbox (9 Watt). Darin verbaut hab ich eine SSD fürs System und eine HDD als Downloadplatte. Zweitere schick ich nach 30 min Idle-Zeit in den Standby. Mein Zyxel läuft 24/7. Bei dem Stromverbrauch macht es einfach einen Sinn, den Rechner runterzufahren. Das Booten würde zu lange dauern.

In meinem Heimnetzwerk sind noch 2 andere Rechner per Lan angeschlossen. Die kann ich bei Bedarf per VPN und WOL hochfahren.

WHS halte ich im Heimbereich für überdimensioniert und unflexibel, da es nur auf x86-Hardware läuft.
 
Naja, der Strombverbrauch liegt höher - sind aber auch 4 2TB und 2 3TB HDDs verbaut - das ist denn ein bisschen mehr als bei Dir ;) Basis ist übrigens ein ASRock Board mit 8Gb Ram und i3 2100.

Nein, ich seh das keineswegs als überdimensioniert. Man kann ja durchaus mehr Dienste laufen lassen, Dinge wie WSUS und ein sauberer IIS ist was feines. Grade SQL mit größeren DBs lässt sich auf nicht-x86 INHO nur begrenzt einsetzen, da ist die Hardware denn einfach zu schwach. Dies sind natürlich nur Beispiele. Bei Frauen im Haus ist das durchaus praktisch wenn der WHS nachts nacheinander die Clients weckt, updatet, Virusdefinitionen verteilt, ein inkrementelles Backup macht und denn wieder schlafen schickt. Die "ich hab nix gemacht"-Effekte tauchen seltener auf, und wenn mal was in die Binsen geht ist der entsprechende Rechner in 20 Minuten wieder komplett auf den vorherigen Stand zurückgesetzt. Aber das ist nicht Thema hier, hier gehts ja um das Script :)

Um auf deinen Punkt mit dem Booten zurückzukommen - der WHS sitzt nur im Standby, er ist in ca. 2-3 Sekunden verfügbar.
 
Dich zwingt niemand dieses Script zu verwenden :rolleyes:

Mir ging es auch nicht darum, es ging mir nur darum, dass ich auf die Schnelle keinen Einsatzzweck erkennen konnte.
Die Ausführung von Tedious bezüglich des Einsatzes zuhause macht allerdings Sinn.

@Tedious: Wie genau wird das Starten des Servers gelöst? Wake on lan?

@phre4k:
Als Anregungen:
Ich bin nicht so firm in Shellprogrammierung, wenn ich das richtig sehe, "spammt" dein Script die Konsole.
Könntest du stattdessen eventuell in ein logfile schreiben?
Ein eigenes Configfile und ein upstart-Script wäre natürlich auch nice.
 
Das starten des Servers wird prinzipiell via WOL initiiert. Die Clients machen das automatisch wenn sie starten - checken "Server online -> wenn nein --> WOL. Wenn ich den Server von extern starten will um drauf zuzugreifen mache ich das per WhatsApp an meinen FHEM Server auf einem Raspi. Dem schicke ich eine WA mit dem Text WOL, FHEM schickt ein WOL raus und der Server startet. Sobald er denn pingbar ist schickt FHEM mir eine WA mit der Info dass er gestartet wurde zu ;)
 
Ein eigenes Configfile und ein upstart-Script wäre natürlich auch nice.

Upstart? Das dürfte doch sehr bald obsolet sein.

Für Systemd würde ich auf die Schnelle sowas hier verwenden.
Code:
Expand Collapse Copy
[Unit]
Description = Lights out for Linux
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/lofl

[Install]
WantedBy=multi-user.target
Allerdings würde das Script dann 1x gestartet und anschließend vergessen werden.

@Phre4k: Ich denke mal, du solltest in das Script noch 'ne Endlosschleife mit Sleep-Befehl reinbauen, damit das Ding in einer Art Daemon läuft.

In der Tat ist dann der dickere Rechner für Deine Zwecke sinnvoll. Um eine Backup-Strategie muss ich mich auch mal noch kümmern. Das letzte (manuelle) Update liegt doch schon einige Monate zurück.
 
Zurück
Oben