Altes Problem wieder da: Rechner (vdr Fileserver) automatisch wieder runterfahren wenn Clients offline sind

  • Hallo zusammen,


    ich hatte das Problem schonmal, meine Loesung damals war: Funktioniert: Server nach Film gucken wieder schlafen legen...


    Kurze Beschreibung: Im Arbeitszimmer steht ein Destkoprechner, der auch als Datengrab fuer meine VDR Aufnahmen fungiert. Diesen Rechner kann ich von den Clients im Haus per WoL wecken. Solange er im Anmeldebildschirm steht, laeuft das o.g. Skript. Der Rechner wird dann runtergefahren, wenn kein Client mehr anpingbar ist.
    Sollte ich mich am Desktop einloggen, dann wird das Skript beendet, der Rechner laeuft ganz normal.


    Jetzt habe ich am WE meine 7 Jahre alte HW ausgetauscht und gleich Ubuntu 14.04 installiert (Gnome Classic mit Metacity). Mal rotzfrech das Skript in die /etc/rc.local eingetragen und: Auch wenn ich mich eingeloggt habe, faehrt der Rechner runter... Die Sache ab Zeile 20 im Skript funktioniert also nicht mehr...


    Ich habe noch nicht probiert, ob er oben bleibt wenn einer der Clients laeuft. Aber dass das Skript nicht aussteigt nach dem Login ist ja ein NoGo.


    Preisfrage: Hat da jemand eine Idee?



    Ratlose Gruesse,
    - berndl

  • ah, der folgende compare schlaegt fehl:

    Code
    if [ "${tty#tty[0-9]}" != "$tty" ] ; then    # Get logged in user(s)
             login="$user"
          fi


    Da kommt NULL zurueck, obwohl im $user oben drueber meine User-Id steht. Aber in $tty steht nur:

    Code
    :0


    Wenn ich das obige if [ "${tty.... auskommentiere, also den $user immer dem login zuweise, dann beendet sich das Skript.
    Preisfrage ist nun: Funzt es damit auch noch, wenn ich nicht eigelogged bin? Und verstehen wuerde ich es auch gerne, warum es jetzt nicht mehr funktioniert...


    Gruss,
    - berndl

  • who liefert unter Ubuntu 14.04 so etwas, wenn man sich am Desktop eingeloggt hat:

    Code
    $ who
    username :0           2014-06-30 19:53 (:0)
    username pts/3        2014-06-30 19:54 (:0.0)


    Dann wird durch den read tty auf ":0" bzw. "pts/3" gesetzt und das herauslöschen von "tty[0-9]" ist bei den Strings nicht möglich. Die Prüfung müsste so aussehen, damit sie sich auf pts/[0-9] anwenden lässt:

    Code
    [ "${tty#pts\/[0-9]}" != "$tty" ]


    Was ist denn der eigentliche Sinn dieser aufwendigen Konstruktion?


    Wäre das so nicht einfacher?

    Code
    if [[ -n $(users) ]]; then
          echo "$(users) logged in, exit script"
          keep_alive=1                  # Stay active since someone's logged in
          loop_active=0                 # Will terminate the while loop
       fi

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

    3 Mal editiert, zuletzt von seahawk1986 ()

  • stimmt! Genau darueber bin ich beim sichten des (ur)alten Codes auch gestolpert. Das ganze muss doch viel einfacher gehen, also timer-loop, wenn User eingelogged dann exit, ansonsten halt die Clients pingen. Wenn (mindestens) einer antwortet, dann weiter in der loop, ansonsten shutdown.


    Ich muss mich da mal dran setzen... (oder jemand hat fuer das ganze Problem eine pfiffige Idee)


    Gruss,
    - berndl

  • Hallo,
    sowas habe ich auch mal gemacht. Funktioniert zwar, aber damals wusste ich noch wenig über bash scripts.... Unschöne Dinge wie im Thread oben beschrieben habe ich auch drin...
    Script wird per cron alle 20 Minuten aufgerufen, prüft alle möglichen Dinge (User, manche Apps, Dämonen (z.B. Backuppc aktiv), dann noch ob seine Freunde noch wach sind (per Ping ).
    Server startet jeden Tag um 8:xx, schaltet nicht vor 10:00 ab außer am Wochenende (HACK).
    Wenn es jemand säubert bin ich froh, aber es läuft hier seit Jahren problemarm. (hatte es auch bei UbuntuUsers veröffentlicht)


    Config: /etc/autoshutdown.conf:


    /usr/local/sbin/checkshutdown.sh:

    Grüße, Dieter :)

  • (hatte es auch bei UbuntuUsers veröffentlicht)


    Hmm... daher kommt mir das bekannt vor. 8) Ich nutze seit längeren eine stark modifizierte Variante dieses Skripts. :] Als "sauber" würde ich meines aber nicht (mehr) bezeichnen. Es leiste mir aber im Moment gute Dienste, da der VDR selber in einer virtuellen Maschine läuft und der Host überprüfen muss, ob er jetzt herunterfahren darf und wann er wieder aufwachen muss wegen einer anstehenden Aufnahme.


    ByE...

    Server:  (K)VM on Proxmox 4.x-Host, VDR 2.2.0 (selbstgebaut vom yaVDR unstable Repo) auf Debian 8 (Jessie), 1x Digital Devices Cine S2 (V6) + DuoFlex S2
    Clients: Raspberry Pi 2/3 mit Raspbian, VDR 2.2.0 (selbstgebaut vom yaVDR unstable Repo) als Streamdev-Clients

  • und der Host überprüfen muss, ob er jetzt herunterfahren darf und wann er wieder aufwachen muss wegen einer anstehenden Aufnahme.


    der Witz bei mir ist ja, da laeuft gar kein VDR! Ich will ja nur den VDR-fileserver (.vdr, darauf greifen client VDRs zu) passend am Leben halten. Also viiiiieeeel einfacher...

  • da laeuft gar kein VDR! Ich will ja nur den VDR-fileserver


    Schon klar. Probier' mal das Skript von Dieter. Das sollte so für deinen Einsatzzweck funktionieren. Einfach die VDR-Clients in die /etc/autoshutdown.conf in die Variable CLIENTS="" eintragen und dein Rechner sollte nur noch herunterfahren, wenn kein VDR-Client auf einen Ping antwortet und kein User eingelogt ist. :) Ich habe bei mir noch Optionen für die WakeUp- und Shutdown-Zeit, AFP, etc... drin


    ByE...

    Server:  (K)VM on Proxmox 4.x-Host, VDR 2.2.0 (selbstgebaut vom yaVDR unstable Repo) auf Debian 8 (Jessie), 1x Digital Devices Cine S2 (V6) + DuoFlex S2
    Clients: Raspberry Pi 2/3 mit Raspbian, VDR 2.2.0 (selbstgebaut vom yaVDR unstable Repo) als Streamdev-Clients

  • Schon klar. Probier' mal das Skript von Dieter.


    Puh, das Skript sieht ja noch komplizierter aus als meines... Aber ich denke, sowas in der Art (ich glaube immer noch, dass es fuer mich 'abgestrippter' tut) brauche ich. Ich will's halt nur auch komplett verstehen, nicht dass ich beim naechsten Mal wieder hier wie der Depp dastehe... Ich versuch's mal die Tage.
    Danke!!

  • Hi,
    bei mit läuft auf dieser Kiste auch kein VDR. Aber meine 79.custom (/usr/share/vdr/shutdownscripts oder wie das auch immer jetzt heißt) hatte Anleihen genommen.


    An "WakeUp- und Shutdown-Zeit" bin ich auch interessiert. Hatte das damals irgendwie hingepfrimelt und es hat sogar den Umstieg von Debian auf Ubuntu 10.04 dann 12.04 überlebt. Sauber war es aber nicht.


    Vielleicht bekommen wir ja einen SCHÖNEN Script hin. Sowas sollte eigentlich als Paket in den Distries drin sein.
    Wer Fragen zu meinem Script hat, her damit...

    Grüße, Dieter :)

  • Hallo Dieter,


    ich habe mich doch fuer seahawks Variante entschieden, es funktioniert bei mir wieder. Ich hab's mal angehaengt falls es noch jemand gebrauchen kann. Ich denke mal, solche Sachen sind immer sehr speziell, also da ein 'generisches' Skript zu schreiben ist zwar sicher moeglich, aber das wird dann halt auch ganz schoen komplex. Ich teste die naechste Zeit mal meine aktuelle Variante (danke an alle fuer die Tipps!)...


    Gruss,
    - berndl

  • achso, noch eine Frage an die shell-Spezln. Die Zeile

    Code
    if [[ -n $(users) ]]; then

    (also das -n $(users) in Zeile 25) verstehe ich noch nicht wirklich... Wo steckt da die Info drin?... Jetzt sag bitte keiner 'google', wenn ich nach '-n' bei google suche dann habe ich bis nach der Rente zu tun...


    Kann mich da jemand (evtl. mit nem Link) aufschlauen?


    Gruss,
    - berndl

  • achso, noch eine Frage an die shell-Spezln.

    Dazu zähle ich mich zwar nicht wirklich, aber ich versuch es mal ...

    Code
    if [[ -n $(users) ]]; then


    Kann mich da jemand (evtl. mit nem Link) aufschlauen?

    Der Befehl users gibt die Namen der eingeloggten User zurück. Wenn niemand eingeloggt ist, kommt da also ein leerer String. Die doppelten eckigen Klammer sind ein extended Test Command der Bash: http://www.tldp.org/LDP/abs/ht…nstructs.html#DBLBRACKETS
    Und der Test mit -n ist unter http://www.tldp.org/LDP/abs/html/comparison-ops.html zu finden und prüft, ob der String nicht null ist:

    Zitat

    -n
    string is not null.


    Caution
    The -n test requires that the string be quoted within the test brackets. Using an unquoted string with ! -z, or even just the unquoted string alone within test brackets (see Example 7-6) normally works, however, this is an unsafe practice. Always quote a tested string.


    Nach dem Hinweis in der Doku soll man den Test-String immer quoten, daher wäre es so besser:

    Code
    if [[ -n "$(users)" ]]; then

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • vielleicht noch als Anregung:

    Serverknecht: HP Pavilion mit Core2Duo, 2x 2TB Raid1, 3x Skystar 2HD auf OpenSuSE 12.1, VDR 2.0.6
    Client 1&2: Giada Cube N3 mit Intel(R) Atom(TM) CPU 330 @ 1.60GHz und nVidia Corporation ION VGA (rev b1) über HDMI @ Full-HD auf yaVDR 0.4
    Client 3: Raspberry Pi Modell B, Raspbian, VDR 2.0.6, rpihddevice über HDMI @ Full-HD, IR am GPIO

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!