staging.inyokaproject.org

Alternatives AutoSuspend-Skript

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |
Dieses Thema ist die Diskussion des Artikels Archiv/Skripte/AutoSuspend.

pierrottc

Anmeldungsdatum:
3. Oktober 2014

Beiträge: Zähle...

Hallo!

Ich möchte einen Samba-Server einrichten, der nur bei Bedarf aktiv ist und sich selbstständig in den Ruhezustand begibt, wenn er nichts zu tun hat. Das Skript funktioniert an sich sehr zuverlässig, danke dafür.

Nur geht der Server auch dann nicht in den Ruhezustand, wenn kein PC im Netzwerk mehr aktiv ist, weil Samba offenbar keine Verbidnungen trennt. Also spätestens bei dieser Abfrge

1
2
3
4
5
6
	if [ "x$SAMBANETWORK" != "x" ]; then
		if [ `/usr/bin/smbstatus -b | grep $SAMBANETWORK | wc -l ` != "0" ]; then
		  logit "samba connected, auto suspend terminated"
		  return 1
		fi
	fi

bricht er das Skript ab und der Server läuft weiter. Trenne ich die Verbindung manuell (kill [PID]), schaltet das Skript beim nächsten Durchlauf den Server zuverlässig ab.

Das Problem ist also, dass Samba die Verbindungen aufrecht erhält, auch wenn die jeweiligen Clients längst aus sind. Liegt das an der Samba-Konfiguration oder muss ich clientseitig etwas einstellen, so dass z.B. Windows die Verbindung explizit trennt und das dem Server mitteilt?

Könnte man alternativ dazu das Skript so modifizieren, dass es aktive Samba-Verbindungen auf eine andere Weise erkennt?

Ansonsten bliebe mir nur übrig den Codeblock komplett zu deaktiveren und mich auf den Ping zu verlassen. Je nach dem, was der Server später noch für Aufgaben haben wird, kann das aber keine gute Lösung sein (Bsp. Verbindung über VPN).

P.S.: Vorher hatte ich das Problem, dass manchmal noch User per SSH verbunden waren und dadurch der Server nicht schlafen gehen konnte. Das konnte ich mit diesem Hinweis beheben: http://www.cyberciti.biz/faq/linux-unix-login-bash-shell-force-time-outs/

Dadurch werden inaktive User nach einer definierten Dauer ausgeloggt.

Gruß!

janeric91

Anmeldungsdatum:
22. Januar 2015

Beiträge: 1

Hallo zusammen,

inwiefern muss ich das Skript modifizieren, wenn ich statt einer SMB- eine AFP-Abfrage implementieren möchte? Der Weg über die Clients zu gehen ist denke ich nicht sinnvoll, da ich neben Mac auch noch iPhone und iPad zum Zugriff nutze und diese ja eigentlich dauerhaft "online" im Heimnetz sind. Daher würde sich der Server doch ergo gar nicht abschalten, wenn diese auch unter Clients eingetragen sind, richtig?

Danke und viele Grüße Jan

pulitzer

Anmeldungsdatum:
15. Juli 2012

Beiträge: 5

Hallo Leute! Erstmal Danke für die gute und verdienstvolle Arbeit, die Ihr Euch macht! ☺

Aber warum so kompliziert? (fragt sich der Anfänger 😉)

Für Menschen, die - wie ich - einfach eine schnelle Timer-Funktion fürs Energiesparen (Bsp.: Hibernate in 30 Minuten) suchen (und den Rechner später "händisch" wieder anwerfen wollen), tut's doch auch ein simpler Terminalbefehl (den man via bash auch zu einem Starter machen kann):

1
echo pm-hibernate | sudo at now + 30 min

Wäre m.E. sinnvoll, das am Anfang des Artikel zu ergänzen, weil wohl die meisten (Hilfesuchenden) zuförderst nach sowas suchen. Auf die Möglichkeiten, das "hibernate" durch "suspend" zu ersetzen und statt einer Laufzeit in Minuten auch eine Uhrzeit (zB. "11pm") einzugeben, sollte natürlich noch hingewiesen werden.

Bitte versteht das nicht als Kritik, sondern als ANREGUNG! Danke und schöne Grüße, Helmut

pierrottc

Anmeldungsdatum:
3. Oktober 2014

Beiträge: Zähle...

pulitzer schrieb:

Hallo Leute! Erstmal Danke für die gute und verdienstvolle Arbeit, die Ihr Euch macht! ☺

Aber warum so kompliziert? (fragt sich der Anfänger 😉)

Für Menschen, die - wie ich - einfach eine schnelle Timer-Funktion fürs Energiesparen (Bsp.: Hibernate in 30 Minuten) suchen (und den Rechner später "händisch" wieder anwerfen wollen), tut's doch auch ein simpler Terminalbefehl (den man via bash auch zu einem Starter machen kann):

1
echo pm-hibernate | sudo at now + 30 min

Wäre m.E. sinnvoll, das am Anfang des Artikel zu ergänzen, weil wohl die meisten (Hilfesuchenden) zuförderst nach sowas suchen. Auf die Möglichkeiten, das "hibernate" durch "suspend" zu ersetzen und statt einer Laufzeit in Minuten auch eine Uhrzeit (zB. "11pm") einzugeben, sollte natürlich noch hingewiesen werden.

Bitte versteht das nicht als Kritik, sondern als ANREGUNG! Danke und schöne Grüße, Helmut

Was soll diese Funktion bringen? Das ist weder eine Automatisierung (und darum geht es hier) noch macht es Sinn, den Rechner in einer definierten Zeit herunterfahren zu lassen, wenn man aktiv daran arbeitet. Autosuspend ist vornehmlich für den Serverbetrieb gedacht, wo man nicht permanent ein Terminal oder eine SSH-Verbindung offen hat. Der Server arbeitet im Hintergrund und wenn er nichts mehr zu bedienen hat, schaltet er ab.

Der Anfänger, von dem du hier redest, richtet keinen eigenen Server ein, sondern arbeitet mit einem Rechner. Wieso sollte dieser nach getaner Arbeit den Rechner erst noch 30 Minuten warten lassen, bevor er herunterfährt?

Vielleicht verstehe ich nur nicht, was du damit sagen willst, aber dieser Hinweis hat imho im Artikel nichts zu suchen. 😉

Waleb

Anmeldungsdatum:
14. Mai 2007

Beiträge: 19

Ich habe ein (oder bessere mehrere) Problem(e) mit dem Skript.

Das wichtigste: Aktive Sambaverbindungen werden nicht erkannt.

Der Befehl aus dem Skript liefert nur folgendes:

1
2
3
4
5
gc@gc-desktop:~$ /usr/bin/smbstatus -b

Samba version 3.6.3
PID     Username      Group         Machine                        
-------------------------------------------------------------------

Es wird keine der vorhandenen Verbindungen angezeigt. Eine Idee woran das liegt und wie ich das ändern könnte?

pierrottc

Anmeldungsdatum:
3. Oktober 2014

Beiträge: 13

Mit welchen Clients besteht denn eine Verbindung? Unterschiedliche Windows-Versionen verwenden verschiedene SMB-Versionen, die nicht alle 100%ig zusammenarbeiten mit Samba.

Schau mal, was /usr/bin/smbstatus (ohne -b) ausgibt. Ich verwende mittlerweile Samba 4.1.17, aber das Skript hatte ich irgendwann an der entsprechenden Stelle folgendermaßen abgeändert (warum weiß ich nicht mehr, aber möglicherweise wegen demselben Problem bei Samba 3.6.3):

1
2
3
4
5
6
7
        if [ "x$SAMBANETWORK" != "x" ]; then
                #if [ `/usr/bin/smbstatus -b | grep $SAMBANETWORK | wc -l ` != "0" ]; then
                if [ `/usr/bin/smbstatus | grep -i no | grep -i locked | wc -l ` != "1" ]; then
                  logit "samba connected, auto suspend terminated"
                  return 1
                fi
        fi

So schaut das Skript nur, ob 'file locks' bestehen. Wenn in der Ausgabe von smbstatus 'No locked files' steht, ist das ein sicheres Zeichen dafür, dass kein Client mehr eine Verbindung zum Samba-Server hat.

Waleb

Anmeldungsdatum:
14. Mai 2007

Beiträge: 19

pierrottc schrieb:

Mit welchen Clients besteht denn eine Verbindung? Unterschiedliche Windows-Versionen verwenden verschiedene SMB-Versionen, die nicht alle 100%ig zusammenarbeiten mit Samba.

Schau mal, was /usr/bin/smbstatus (ohne -b) ausgibt. Ich verwende mittlerweile Samba 4.1.17, aber das Skript hatte ich irgendwann an der entsprechenden Stelle folgendermaßen abgeändert (warum weiß ich nicht mehr, aber möglicherweise wegen demselben Problem bei Samba 3.6.3):

1
2
3
4
5
6
7
        if [ "x$SAMBANETWORK" != "x" ]; then
                #if [ `/usr/bin/smbstatus -b | grep $SAMBANETWORK | wc -l ` != "0" ]; then
                if [ `/usr/bin/smbstatus | grep -i no | grep -i locked | wc -l ` != "1" ]; then
                  logit "samba connected, auto suspend terminated"
                  return 1
                fi
        fi

So schaut das Skript nur, ob 'file locks' bestehen. Wenn in der Ausgabe von smbstatus 'No locked files' steht, ist das ein sicheres Zeichen dafür, dass kein Client mehr eine Verbindung zum Samba-Server hat.

Statt der IP steht der Name des Rechners, der auf eine Datei zugreift. Habe mir jetzt so beholfen dass ich nach "2016" greppe weil auch immer die Zeit des Datei-Zugriffs dabeisteht. Muss nur jedes Neujahr daran denken ☺.

airigh

Anmeldungsdatum:
8. Januar 2009

Beiträge: 4

Wie müsste ich das Skript modifizieren, wenn ich kein pm-utils mehr habe, weil seit Ubuntu 15.04 systemd statt den pm-utils fürs Power Management verwendet wird?

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6389

Artikel war zuletzt getestet für lucid, dann wurde die getestet-Box auskommentiert. Hab den Artikel auf ungetestet gesetzt.

(Zur Begründung siehe auch die Hinweisbox im hier verwendetetn pm-utils )

Gruß BillMaier

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6389

Hallo,

letzte Chance zum Testen des Artikels für eine aktuelle Ubuntu-Version, sonst wird der Artikel archiviert. (bisher auch keine Reaktion auf ungetestete-wikiartikel-zum-thema-skripte

Gruß BillMaier

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6389

archiviert.

Antworten |