Quetschke
Anmeldungsdatum: 5. Juli 2008
Beiträge: 61
|
Hallo zusammen, ein rund um die Uhr laufender Heimserver verursacht einen ziemlich hohen Energieverbrauch. Daher habe ich nach einer Lösung gesucht, Energie zu sparen. Die Nutzung von granola (ähnlich powernowd) war ein guter Anfang, doch reichte mir das nicht. Dann bin ich auf das "Auto OFF"-Skript gestoßen, was mir vom Ansatz her sehr gut gefallen hat. Allerdings möchte ich meinen Server nicht komplett herunterfahren, da das Booten ja auch seine Zeit braucht und er - wenn er gebraucht wird - schnell zur Verfügung stehen soll. Daher habe ich mich entschlossen, das Skript zu ändern, sodass stattdessen ein Suspend eingeleitet wird. Das "Auto SUSPEND"-Skript konnte ich nicht nutzen, da der Server in erster Linie Dienste bereitstellt und selten ein Nutzer per SSH angemeldet ist. Als ich nun schon dabei war, habe ich das Skript noch um ein paar für mich wichtige Funktionen erweitert und bin zu dem Schluss gekommen, dass diese auch für andere nützlich sein könnten. Daher habe ich unter Baustelle/Skripte/AutoSuspend einen Wiki-Eintrag mit der modifizierten Version des Skriptes und einigen weitergehenden Informationen angelegt. Bitte gebt mir ein Feedback, ob der Artikel in das Wiki verschoben werden soll oder überflüssig ist. Danke!
|
noisefloor
Ehemaliger
Anmeldungsdatum: 6. Juni 2006
Beiträge: 28316
|
Hallo, ein paar Anmerkungen: Die Warnbox bei "Vorbereitung" ist überflüssig- Führe einfache alle zu installierenden Pakete gem. Wiki-Syntax auf und verweise wo notwendig auf die entsprechenden Artikel. Befehle wie sudo touch /etc/autosuspend_resumeplan gehören in eine Befehlsbox, nicht eine Codebox.
Ansonsten IMHO ok. Gruß, noisefloor
|
Feuerblitz2
Anmeldungsdatum: 21. Juli 2010
Beiträge: 15
|
Hi
habe einen kleinen Fehler gefunden
Hier ist der Dateiname falsch Und anschließend ausführbar gemacht:
sudo chown root:root /usr/local/sbin/checkshutdown.sh
sudo chmod u+x /usr/local/sbin/checkshutdown.sh richtig heißt es
Und anschließend ausführbar gemacht:
sudo chown root:root /usr/local/sbin/autosuspend.sh
sudo chmod u+x /usr/local/sbin/autosuspend.sh MFG
Feuerblitz2 Ps.: Ich nehme die Änderung gleich vor.
|
Feuerblitz2
Anmeldungsdatum: 21. Juli 2010
Beiträge: 15
|
Hallo Ich finde das man den ersten Satz anders Formulieren sollte.
Dieses AutoSuspend-Script versetzt den Computer bei Nichtbenutzung automatisch in den Standby-Modus (je nach Verfügbarkeit: ... Besser finde ich:
Dieses AutoSuspend-Script versetzt den Computer bei Nichtbenutzung automatisch in den Energiespar-Modus (je nach Verfügbarkeit: ... Weiter hin sollte man auf eine einheitliche Verwendung der Begriffe "Standby Hibernate" achten. MFG
Feuerblitz2
|
Heinrich_Schwietering
Wikiteam
Anmeldungsdatum: 12. November 2005
Beiträge: 11288
|
Hi! Ich hab' das ganze jetzt verschoben, Skripte/AutoSuspend, allerdings ist mir dabei auch dieses Skript aufgefallen: Skripte/Auto SUSPEND, das anscheinend nicht nur in der Namensgebung ganz ähnliches beinhaltet... Brauchen wir dann wirklich beides? Sollte man es besser zusammenfassen? Trotzdem erstmal besten Dank an Quetschke 👍 so long hank EDIT: Ok, man sollte genauer lesen, Einwand ist ja im Eröffnungspost schon ausgeräumt... -sorry!
|
H.i.M
Anmeldungsdatum: 17. November 2006
Beiträge: 261
|
Ich habe einige Anregungen zu diesem Artikel. Es geht um Schritt 4. Dieser funktioniert bei mir (Kubuntu 10.04.3) so nicht. Siehe dazu http://forum.ubuntuusers.de/topic/magic-packet-nach-suspend-to-ram-via-wlan-senden/. 1. wird in pm-utils beschrieben, dass Hooks unter | /usr/lib/pm-utils/sleep.d
|
abgespeichert werden sollen. 2. wird der Hook in Schritt 4 nicht ausführbar gemacht. 3. ist dessen Priorität (90) für systemkritische Anwendung vorbehalten und wird noch vor dem Networkmanager (55) ausgeführt. Das hat zur Folge, dass das magic-packet ins Nirwada geht. EDIT 4. scheint zu fehlen(?). Ich schlage daher vor den Befehl zum erstellend der Konfigurationsdatei zu ändern in (es fehlt noch exit $?): | echo -ne '#!/bin/sh\ncase "$1" in\n\tresume|thaw)\n\t\t/usr/local/sbin/wakeserver.sh\n\t\t;;\nesac\n' | sudo tee /usr/lib/pm-utils/sleep.d/50_wakeserver
|
und
| sudo chmod +x /usr/lib/pm-utils/sleep.d/50_wakeserver
|
Weitere Anregungen & Kritik sind sehr willkommen. Grüße H.i.M
|
Lemy
Anmeldungsdatum: 27. Juni 2008
Beiträge: 20
|
Hi ich hab noch ne Kleinigkeit in das Skript eingebaut, um es auf meinem Meidaserver laufen zu lassen. Ich bin mir nicht ganz sicher ob ich das hier richtig verstanden habe:
| # Read logged users
USERCOUNT=`who | wc -l`;
# No Suspend if there are any users logged in
test $USERCOUNT -gt 0 && { logit "some users still connected, auto suspend terminated"; return 1; }
|
aber da ich diesen Server auch zum Fime gucken usw. benutze, ist permanent ein Nutzer angemeldet. Deshalb hab ich den oben genannten Teil auskommentiert und durch | # Monitor an?
if [ `xset q -display :0.0| grep "Monitor is " | tail -c3` = "On" ]; then
logit "Monitor ist an, auto suspend terminated"
return 1
fi
|
ersetzt.
Somit bleibt der Server an, wenn ich lokal irgendwas mache. Vielleicht hilft das ja manch einem. Grüße Lemy
|
architom
Anmeldungsdatum: 12. März 2012
Beiträge: 1
|
Hallo, Ich habe das Skript auf meinen Server eingebaut und es funktioniert soweit. Er legt sich schlafen und wacht auch wieder auf. Was ich allerdings bisher nicht geschafft habe ist, dass sich der Server z.B. nicht erst nach Mitternacht schlafen legt, sondern schon z.B. 22:00 Uhr.
Im Skript ist ja als "night" die Zeit von 3 - 8 Uhr hinterlegt. Ich kenne mich mit shell-scripts nun nicht so aus, dass ich das alles durchblicken würde. Irgendwie komme ich nicht so richtig mit den Zeiten klar bzw. schaffe es nicht, den "date"-Befehl anzupassen. Problem ist für mich dabei, den richtigen Tag zu treffen. Lässt sich das ganze nicht so anpassen, dass man in einer Datei z.B. angeben kann: night_start = 22:00
night_end = 6:30
# und was jetzt in autosuspend_resumeplan steht:
wakeup = 7:00
? Grüße
architom
|
Lemy
Anmeldungsdatum: 27. Juni 2008
Beiträge: 20
|
So nachdem ich nun endlich das Wake on Lan zufriedenstellend gelöst habe, kommt dieses Skript bei mir nun auch wirklich zum Einsatz. Ich dokumentier hier mal die von mir gemachten Veränderungen. Wenn jemand sich für dieses Skript zuständig fühlt kann er/sie sinnvolle Änderungen ja in den Wikieintrag übernehmen. # Important applications that shall prevent the suspend. Hier brauchte ich eine Möglichkeit auch Javaprogramme zu identifizieren, speziell den JDownloader.
Dafür habe ich pgrep in IsRunning() die Option -f mitgegeben
| IsRunning()
{
for i in $*; do
if [ `pgrep -fc $i` -gt 0 ] ; then # Option -f hinzugefügt, um Javaprogramme besser identifizieren zu können
logit "$i still active, auto suspend terminated"
return 1
fi
done
return 0
}
|
Die Programme müssen dann folgendermaßen eingetragen werden: $ für das Zeilenende werden zu \> für das Wortende. Bei Javaprogrammen das ^ für den Zeilenanfang durch \< für den Wortanfang ersetzten.
| APPLICATIONS='\<JDownloader.jar\> ^nxagent\> ^rsnapshot\> ^wsus\> ^wget\> ^screen\> ^mlnetp\> ^apt-get\> ^aptitude\> ^dpkg\> ^cp\> ^unison\>'
|
Die Funktion IsOnline() funktionierte bei mir nicht richtig. Da ich mein gesamtes LAN absuchen wollte habe ich in der /etc/autosupend zwei Teilnetzwerke hinzugefügt (siehe unten) die ich dann in das Array Clients geschieben habe (Klammern beachten!):
| TEILNETZWERK1="`for i in {51..99}; do echo "192.168.188.$i"; done`" # OpenVPN
TEILNETZWERK2="`for i in {106..149}; do echo "192.168.188.$i"; done`" # lokal
CLIENTS=(`echo ${TEILNETZWERK2}` `echo ${TEILNETZWERK1}` )
|
Im Skript habe ich dann den Funktionsaufruf von IsOnline() folgendermaßen abgewandelt:
| IsOnline ${CLIENTS[@]} # Alle eintraege des Arrays werden übergeben
|
und die Funktion selbst abgeändert:
| IsOnline()
{
for i in $@; do #$* in $@ geaendert
ping $i -c1
if [ "$?" == "0" ]; then
logit "PC $i is still active, auto suspend terminated"
return 1
fi
done
return 0
}
|
Gut möglich das das mit dem Arrayzeug unötig ist, aber irgendwas stimmte bei mir vorher nicht. Dann habe ich noch eine Abfrage eingebaut die ermittelt ob der Bildschirm an ist (siehe mein erster Post in diesem Thema). Allerdings stellte sich raus das die Ausgabe von "xset q" den gewünschten Test "Monitor is on" nur bei aktivem DPMS ausgibt. Die zwei von mir getesteten Videoprogamme deaktivieren dies jedoch, vermutlich um ein Abschalten des Monitors während des Viedogenusses zu unterbinden. Deshalb die kleine Erweiterung zu oben. (Achtung false positiv Gefahr.)
| # Monitor on?
if [ "`xset q -display :0.0 | grep "Monitor is " | tail -c3`" = "On" ] || [ "`xset q -display :0.0 | grep "DPMS is " | tail -c9`" = "Disabled" ]
then
logit "Monitor is on, auto suspend terminated"
return 1
fi
|
Zu guter Letzt habe ich noch die Passage in IsBusy() auskommentiert die die eingelogten User zählt, da das bei mir nicht das gewünschte Resultat erbringt und es überflüssig geworden ist. MfG Lemy
|
PreciseFan
Anmeldungsdatum: 9. November 2012
Beiträge: 5
|
Hallo, nachdem PCHSwS und ich verzweifelt versucht haben das AutoSuspend-Skript zum Laufen zu bringen, haben wir festgestellt das die Syntax in der Beispiel-Konfigurationsdatei nicht funktioniert oder falsch ist. Sicher funktioniert es, wenn die Variablendefinitionen, also das hinter dem =, in solchen Anführungszeichen geschrieben werden: " " Also so: VARIABLE="wert" Gruß PreciseFan
|
jferch
Anmeldungsdatum: 17. Januar 2014
Beiträge: 1
|
Hallo zusammen, ich versuche das Skript auf meinem Arch Linux fileserver zum Laufen zu kriegen, jedoch funktioniert das automatische suspend nur beim Ersten mal nach dem Reboot. Hat wer spontan eine Idee an was das liegen kann? Muss der Cronjob nach jedem aufwachen aus dem suspend neu gestartet werden?
Danke im Voraus!
|
john.cord
Anmeldungsdatum: 26. Januar 2014
Beiträge: 6
|
Verwende das Skript unter 12.04 LTS und bin draufgekommen das bei der SAMBA Abfrage der verwendete Schalter "-b" keine Ausgabe ergibt (zumindest unter 12.04 und der SAMBA Version 3.6.3) Mit "-S" bekommt man ein Ergebnis, bei mir aber nich die IP sondern nur den Hostnamen. Keine Ahnung woran das liegt... Daher sollte im Skript die Zeile | if [ `/usr/bin/smbstatus -b | grep $SAMBANETWORK | wc -l ` != "0" ]; then
|
durch | if [ `/usr/bin/smbstatus -S | grep $SAMBANETWORK | wc -l ` != "0" ]; then
|
ersetzt werden. Interessant wäre es noch wie man SAMBA dazu bekommt das man die IP und nicht den Hostnamen angezeigt bekommt, dann wäre das Skript weiter mit der IP Range nutzbar, sonst müsste man die Hostnamen angeben.
|
nebosa
Anmeldungsdatum: 19. April 2014
Beiträge: 7
|
Hi, ich bin neu hier und hab noch nicht viel Ahnung von Linux ☹
Ich hab versuch dieses Script hier zu übernehmen Skripte/AutoSuspend leider ohne grossen Erfolg... Ubuntu 13.10 Ich denke ich habe alles so gemacht wie im Wiki steht aber der PC geht nicht in Standby ☹
Wenn ich auf der Konsole "sudo /usr/local/sbin/autosuspend.sh" eingebe, kommt es zur folgenden Meldung: AutoSuspend: some users still connected, auto suspend terminated
AutoSuspend: aborted Wäre wirklich toll wenn mir da jemand weiterhelfen könnte.... Danke!
|
tomXubuntu
Anmeldungsdatum: 14. September 2010
Beiträge: 3
|
Hallo,
Das ein tolles Skript, ich habe allerdings ein kleines verständnissproblem:
Das Script findet einen Prozess nicht, und ich vestehe nicht warum:
ich suche nach ^md0_resync$ ich hab das auch in der Datei /etc/autosuspend entsprechend ergänzt!
Ein zusätzlicher logit in IsRunning() bestätigt das: IsRunning()
{ for i in $*; do
logit "appl testen: $i"
logit pgrep $i
if [ pgrep -c $i -gt 0 ] ; then
logit "Applications $i still active, auto suspend terminated"
return 1
fi
done
return 0
} Der Prozess läuft; ich prüfe das an der Console (als root) mit:
pgrep -c "md0_resync"
Der output gibt 1 aus.
Der output vom Script besagt aber 0.
Uund das ist genau das was ich nicht verstehe...
Habe ich da irgendwo einen Denkfehler?
Was mache ich falsch? Wieso klappt der pgrep an der Console, aber nicht wenn ich das Script (auch als root) ausführe???
kann mir jemand helfen? Viele Gruesse tomXubuntu
|
tomXubuntu
Anmeldungsdatum: 14. September 2010
Beiträge: 3
|
Ha!
in der Datei /etc/autosuspend die hier Beitrag steht, sind die Prozesse, nach dennen gesucht werden soll in "" gesetzt.
Das ist der Grund warum diese bei mir nicht gefunden werden....
Der sucht nach dem String "^md0_resync$" und den gibt es ja nicht, aber der String ^md0_resync$ wird gefunden...
Jetzt bin ich natürlich kein linux Experte...
Deshalb die Frage: Ich setzt hier Debain ein... ist da ein Unterschied diesbezüglich zwischen Debian und Ubuntu?
Ich kann es mir zwar nicht vorstellen, aber wer weiß das schon so genau...
Ansonten könnte man das hier in dem Beitrag korrigieren, bevor der nächste drauf reinfällt...
Grüße
tomXubuntu.
|