• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Linuxserver selbstständig in "Suspend to Disk" versetzen

Hallo,

ich habe heute folgende Frage und bereits den ein oder anderen OLösungsansatz gefunden:

Ich möchte gerne meinen Linuxserver nach einer Inaktivität von x Minuten in den Ruhezustand versetzen.
Das ganze lässt sich ja unter anderem mit KPowerSave realisieren. Auch kann man hier durch Listen verhindern, das diese Aktion zu früh erfolgt.

In der Dokumentation zu KPowerSave kann man entnehmen, das hierbei Netzwerkaktivitäten jedoch nicht berücksichtigt werden.
Das ist bei mir der Knackpunkt. Der Linuxserver sol erst dann in den Ruhezustand versetzt werden, wenn kein Rechner mehr an diesen angemeldet ist.

Über Google habe ich eine Möglichkeit durch senden eines manuellen Befehles über Putty gefunden. Dieser erfordert jedoch eine Reaktion.

Kennt jemand eine Software für Linux oder anderen Lösungsansatz für dieses Problem?

Danke für eure Hilfe.

Merlin
 
Kommt drauf an was Du unter "angemeldet" verstehst. SSH Logins lassen sich über "who" abfragen.
 
A

Anonymous

Gast
Eventuell hilft die dieser alte Beitrag weiter, nur eben nicht runterfahren sondern suspend auslösen. http://www.linux-club.de/viewtopic.php?f=21&t=20480

robi
 
Danke an euch beide!

Ich habe nach wirklich langer Suche im Internet zwei Scripte gefunden, die mein angesprochendes Problem im Ansatz lösen. Diese habe ich mit meinem Laienwissen mal zu einem vereint und eine Lösung erhalten, die sehr gut funktioniert.

Hier das Script:
Code:
#!/bin/sh
#
# (cc:by-sa) 2007 Marco Gabriel, http://www.marcogabriel.com/
#
# Powersaver.sh
# Modifiziert durch Merlin der Zauberer
###
# CONFIG
###

# filename of the statusfile
STATUSFILE="/xxx/powersavenetwork-status"

# which ip range should be checked?
RANGE=`cat /xxx/auto-shutdown-ips.dat`
NUMCLIENTS=0

# how many clients are always on (other servers, routers, etc)
MINCLIENTS=1

# shutdown after how many retries?
RETRIES=1

###
# ENDE CONFIG
###

let RETRIES=$RETRIES+1

for i in $RANGE
	do 
		ping -c 4 $i 
		if test $? -eq 0 
		then 
			echo "$i ist erreichbar!" 
			let NUMCLIENTS=$NUMCLIENTS+1;
			
			
		fi
	done

if [ $NUMCLIENTS -le $MINCLIENTS ]; then
    if [ ! -f "$STATUSFILE" ]; then
        echo "COUNT=$RETRIES" > $STATUSFILE
    fi
    . $STATUSFILE
    if [ $COUNT -le 1 ]; then
        echo "Shutdown, my dear..."
	 echo "COUNT=$RETRIES" > $STATUSFILE
	 powersave -U;
	# shutdown -h now;
    else
        let COUNT=$COUNT-1
        echo "COUNT=$COUNT" > $STATUSFILE
    fi;
else
    if [ -f "$STATUSFILE" ]; then
        rm $STATUSFILE
    fi
fi

Dieses Script speichere ich im Verzeichnis xxx/ (im Script Ordner mit xxx dann durch den Scriptordner ersetzen).
Die Variable MINCLIENTS gibt an, wieviele Rechner sich immer Onlinestatus befinden.
Die Variable RETRIES gibt an, nach wieviel Überprüfungsdurchgängen der Rechner in einen definierten Zustand versetzt werden soll

Nun fehlt im Scriptordner noch eine Datei mit dem Namen auto-shutdown-ips.dat. In dieser werden pro Zeile eine vollständige IP-Adresse eingetragen, die geprüft werden soll (z.B. 125.255.222.10)

Dann das ganze per Cronjob regelmäßig starten.

---------------------------------------------------

Neues Problem: Wie kann ich im Shellscript prüfen, ob zur Zeit eine Datensicherung über Webmin durchgeführt wird?

Meine Vorstellung wäre, zu prüfen, ob zur Zeit im Sicherungsverzeichnis Daten geschrieben werden. Geht das? Wenn ja, wie.

Da ich von Shellprogrammierung (noch nicht) nicht viel Ahnung habe, würde ich mich über eure Lösungsansätze sehr freuen.

Merlin der Zauberer

@Edit: Es hat sich leider ein kleiner Fehler eingeschlichen

Code:
if [ $COUNT -le $MINCLIENTS ]; then

muß richtig heissen

Code:
if [ $COUNT -le 1 ]; then

Im Script habe ich es geändert
 
Oben