unicorn0815 Geschrieben 20. Juni 2010 Melden Share Geschrieben 20. Juni 2010 Hi zusammen, Ich habe hier einen Fileserver in Betrieb, auf den verschiedene Geräte (PC, Dreamboxen und Dbox) per NFS zugreifen. Was ich nun gern erreichen würde, ist, diesen Server automatisch nach einer Zeit X, in der keine Zugriffe erfolgt sind, herunterfahren zu lassen. Das Aufwecken per WOL funktioniert von allen Geräten aus ohne Probleme. Die Variante, den Server von einem zugreifenden Gerät herunterfahren zu lassen, wenn der Zugriff beendet ist, fällt leider aus, da es durchaus sein kann, dass mehrere Geräte gleichzeitig drauf zugreifen. Das Problem, welches ich nun habe, ist: wie kann ich bei NFS-Verbindungen auf dem Server feststellen, ob eine solche Verbindung noch aktiv ist oder nicht? Ein einfaches anpingen der Clients bringt nicht wirklich was, da sie zum Teil permanent eingeschaltet sind, somit würde also auch der Server nie abgeschaltet. Eine Möglichkeit, dir mir so eingefallen ist, wäre mit "lsof" zu schauen, ob auf die freigegebenen Dateien zugegriffen wird. Aber entweder bin ich da komplett auf dem Holzweg, oder hab die richtigen Optionen dafür noch nicht gefunden. Jedenfalls wird in dem Fall nichts angezeigt, selbst wenn 100%ig auf eine solche Datei zugegriffen wird. Wäre schön, wenn jemand eine Idee hätte, wie man das realisieren könnte. Ach ja, auf dem Server läuft Archlinux, wobei das aber nicht wirklich eine Rolle spielen dürfte...ist ja eher Linux allgemein... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zapt Geschrieben 21. Juni 2010 Melden Share Geschrieben 21. Juni 2010 Hallo unicorn, habe keine konkrete Idee, was ist aber, wenn du anstatt des Prüfens auf Dateien, checkst ob die Festplatte noch läuft. Das wäre doch eine weitere Möglichkeit oder? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Admin Gandalf Geschrieben 21. Juni 2010 Admin Melden Share Geschrieben 21. Juni 2010 Was du brauchst ist ein Script das die Netzwerkkarte checkt und wenn sich nix ändert an den Datenmengen über ein Protokoll (z.b. smb, ssh) dann den Server runterfahren lässt, so wie es VDR-Systeme auch machen, die Open Source VDR-Systeme könnten auch eine Basis für dein Script sein. Vielleicht hilft dir das hier auch weiter -> Klick Z.B. das hier könnte eine Basis für dich sein, führt auch einen ssh-Test durch #!/bin/bash # # Utility script to check the user GDM session when mythshutdown --check is issued # # Min Idle Time. Amount of time of user idle time before ok to shut down minidle="45min" echo "Mythshutdown.sh Check started. Asking mythshutdown --check" mythshutdown --check mythstatus=$? if [ $mythstatus -gt 0 ] then echo "Myth Backend says it is busy" exit $mythstatus fi echo "Myth Backend says it is not busy. Do we have any users?" idle=`dbus-send --system \ --dest=org.freedesktop.ConsoleKit \ --type=method_call --print-reply \ --reply-timeout=20000 \ /org/freedesktop/ConsoleKit/Manager \ org.freedesktop.ConsoleKit.Manager.GetSystemIdleHint | grep -c "boolean true"` # Alternatively do below and parse the result idlesince=`dbus-send --system --dest=org.freedesktop.ConsoleKit \ --type=method_call --print-reply --reply-timeout=20000 \ /org/freedesktop/ConsoleKit/Manager \ org.freedesktop.ConsoleKit.Manager.GetSystemIdleSinceHint | grep string | cut -c 23-30` # ---> # method return sender=:1.8 -> dest=:1.115 reply_serial=2 string "2009-02-09T21:46:29Z" # What time was it $minidle minutes ago? # date -d -30min -u # --> # ma 16.2.2009 20:45:46 +0200 sinceminidle=`date -d -$minidle -u | cut -d" " -f 3` if [ $idle = 0 ] then echo "GetSystemIdleHint says not idle. We are to wait for the user." exit 1 fi echo "Idlesince = $idlesince. Since Min Idle = $sinceminidle" if [ "$sinceminidle" \< "$idlesince" ] then echo "System idle for less than $minidle. Still waiting." exit 1; fi echo "System idle for more than $minidle. Checking ssh connections" ssh=`ps -ef | grep sshd | grep -c @ ` if [ $ssh -gt 0 ]; then echo "There is active $ssh sessions- not shutting down." exit 1 fi echo "No active ssh sessions - checking for the lock-file" if [ -e /var/lock/mythshutdown.lock ] then echo "Lock file /var/lock/mythshutdown.lock exists - some maintenence operation underway?" exit 1 fi echo "No lock file found" echo "All checks done. Ok to shut down" exit 0 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
unicorn0815 Geschrieben 22. Juni 2010 Autor Melden Share Geschrieben 22. Juni 2010 Danke Euch mit einer Kombination aus beiden läuft es nun so wie es soll. Per Cronjob wird alle 10 Minuten ein Script ausgeführt, welches die Ausgabe von "hdparm -C ..." in ein Logfile schreibt und dann zunächst auf noch aktive SSH-Sitzungen prüft. Sind keine mehr aktiv, wird geprüft, ob die letzten 3 Einträge im Logfile "standby" enthalten. Ist das der Fall, wird der Rechner runtergefahren, vorher allerdings das Logfile geleert, um sicher zu stellen, dass es mit der Zeit nicht aus allen Nähten platzt Falls noch jemand sowas brauchen kann, hier das Script (muss als Root ausgeführt werden): #!/bin/bash SHUTDOWN="/sbin/shutdown -h now" STATUSFILE="/var/log/hddstatus.log" MAXCOUNT=3 HDD="/dev/sdb" # Schreibe hdd-Status in $STATUSFILE hdparm -C $HDD >> $STATUSFILE # ssh-Sitzung aktiv? ssh=`ps -ef | grep sshd | grep -c @ ` if [ $ssh -gt 0 ]; then exit 1 # Abbruch, wenn SSH-Sitzung vorhanden fi # /dev/sdb in standby für MAXCOUNT * 10 Minuten? # dieses Script wird per Cronjob alle 10 Minuten ausgeführt # und schreibt einen Eintrag nach $STATUSFILE # es werden die letzten 8 Zeilen aus $STATUSFILE gelesen, # um nur die letzten 3 Einträge zu berücksichtigen STDBYCOUNT=`tail -n 8 $STATUSFILE | grep "standby" | wc -l` if [ "$STDBYCOUNT" -ge "$MAXCOUNT" ] then # "HDD im Standby, System herunterfahren, vorher Logfile leeren echo "" > $STATUSFILE $SHUTDOWN else exit 0 fi Zu beachten ist dabei allerdings, dass in meinem Fall die Festplatte, auf die die Clients zugreifen, unabhängig von der Systemplatte ist. Ansonsten kann es sein, dass es so nicht funktioniert, weil je nach Systemkonfiguration die Platte womöglich gar nicht in den Standby geht, weil das System immer irgendwie drauf zugreift (syslog, oder andre Dienste, die regelmässig irgendwelche Logfiles schreiben). Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Empfohlene Beiträge
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.