Funktioniert: Server nach Film gucken wieder schlafen legen...

  • Nochmal hi allerseits,


    bei mir laeuft hier seit ein paar Jahren ein fuer mich prima setup:
    Ich habe im Arbeitszimmer einen Server stehen, der vom Wohnzimmer aus per WoL geweckt wird. Dann werden (am WZ VDR) die Platten des Servers gemounted, das komplette Filmarchiv ist verfuegbar. Wenn ich dann irgendwann abends/nachts eindusele, dann faehrt sich der Server im AZ nach einer einstellbaren Zeit selber runter. Der VDR im WZ schaltet sich sowieso nach soundsolang selber ab. Also alles OFF.
    Auf dem Server laeuft ein kleines script 'check_idle' siehe hier:
    SuSE 9.0, EPIA ME-6000 und Wake-on-Lan (WOL)
    und das hat bisher prima funktioniert. Jetzt ist mir neulich mein Router abgeraucht, mit dem neuen Router schaltet sich der Server nicht mehr ab...


    Diese Funktionalitaet haette ich aber gerne wieder...


    Was mir vorschwebt: Ich starte den Server im AZ per WoL vom WZ-VDR. Der Server faehrt hoch, haengt im (bei mir Ubuntu) Anmeldebildschirm. Dann sollte er sich nach einer einstellbaren Zeit (1-2 Stunden) selber wieder runterfahren. (EDIT: wenn vom WZ-VDR kein Traffic kommt, also ich keinen Film auf dem Server gucke)...
    Sollte ich mich am Server (==Desktop im AZ) einloggen, dann soll er alles vergessen und normal laufen.


    Wie gesagt, check_idle hat das bisher prima erledigt (wenn ich am AZ-Rechner sitze laeuft auch ein FireFox und es gibt traffic auf'm Netz), aber jetzt stehe ich auf'm Schlauch...


    Kann ich da was machen ala:
    * Server faehrt hoch, ein Programm wird geladen das ihn nach z.B. 1h wieder runterfaehrt
    * Sollte ich mich am Server einloggen wird dieses Programm wieder inaktiv/abgeschossen
    * Haengt er im Anmeldebildschirm, dann kriegt er von meinem VDR als mal ein 'bleib wach' Kommando (per svdrpsend, aber wie mache ich das?) und bleibt an. Kommt kein Kommando vom WZ VDR mehr faehrt er sich nach einer gewissen Zeit wieder runter.


    Also ich hab' keinen Plan wie ich so was machen koennte. Waere aber fuer mich eine Traumloesung...


    Hat jemand 'nen Tipp fuer mich?


    Gruss,
    - berndl

  • Hallo berndl,


    Ich verfahre so :


    Server fährt hoch, wird vom Clienten per nfs gemountet. Beim Sytemstart Server wird folgendes Script ausgeführt, welches überwacht ob ein nfs mount besteht. Wenn nicht ( mehr ) --> shutdown



    Überpüft ob auf 192.168.6.22 ( Server ) ein nfs mount besteht , schläft 60 sekunden, wenn ja oder fährt runter , wenn nicht.


    Läuft hier schon ewig ( mit genau einem Clienten und einem Mount ) ,


    Grüße vom Alex

    Wer Rechtschreibfehler findet, darf sie behalten


    Meine Konfiguration :


    Ion 2, 2 x S2 3600, 4 Gig Ram, OS : Kubuntu 12.04 LTS, Kernel 3.2.0-40-generic , x86_64, vdr.2.0.1 ( yavdr-testing ) , vdr-xine 0.9.4 ( yavdr-testing ) , xine-lib 1.2 ( yavdr-testing )

  • Hi Alex,


    danke, das probiere ich mal aus. Bei mir wird halt der Timeout auf 1 oder 2 Stunden sitzen, da bei mir eben nicht automatisch gemounted wird (nur bei Bedarf). Und es ist ja nur die Schlummerschaltung...


    Gruss,
    - berndl

  • hmm, da faellt mir noch ein:


    Wenn ich am Server/Desktop eingelogged bin, soll natuerlich die Schlummerschaltung _nicht_ zuschlagen (waere ja daemlich...). Wie kriege ich denn das hin, ohne nach dem einloggen jedesmal die PID des Programms suchen zu muessen und es mit kill abzuschiessen?


    Im oben genannten 'check_idle' wurde das ja mit dem $PID_FILE sowie den Aufrufparametern 'up' und 'down' gemacht...


    Gruss,
    - berndl

  • Hi berndl,


    nur mal so als Idee, ohne diese auch verifiziert zu haben:


    Evtl. reicht es aus, wenn du im Skript auf das vorhanden sein einer x pid Datei prüfst... Die sollte nur da sein, wenn auch ein X läuft...


    Bei mir Ubuntu/Gnome gibt es z.B. eine /var/run/gdm.pid


    Bette einfach das shutdown-Kommando in eine Abfrage ähnlich der Folgenden ein:


    Code
    if [ ! -e /var/run/gdm.pid ]; then 
        shutdown -h now
    fi


    ah, ich sehe gerade, es handelt sich um ein Perl Skript...


    Dann sollte es so klappen:


    Code
    if ( ! (-e "/var/run/gdm.pid") )
    {
        print "shutdown\n"  
        system ("shutdown -h now") ;
    } 
    else
    {
        print "no shutdown - X detected\n"  
    }



    HTH
    Björn

    VDR: P3 650 passiv, 256 MB RAM, 40GB System HDD, 180 GB video0 HDD, TT1.5 + AVBoard
    gen2vdr 1.2 mit VDR 1.4.7
    HDVDR in spe: AMD Athlon II X2 245e (2x 2.9GHz, 45W TDP), Gigabye GA-880GA-UD3H, 4 GB DDR3-RAM, 2TB HDD (WD EARS), Technotrend S2-3200)

    Einmal editiert, zuletzt von Bjoern ()

  • Noch einer:


    VDR fährt nich herunter, solange ein Client am Streamdev-Server hängt. Das gilt auch, wenn der Client-VDR gar kein Live-Bild anzeigt, sondern nur per NFS eine Aufnahme abspielt. Folgende Reihenfolge klappt daher bei mir:


    - Server hochfahren
    - Client hochfahren
    - Server ein poweroff geben
    - Film per Client schauen
    - Client herunterfahren
    - Server fährt 5min später automatisch herunter


    Gruß,


    Udo

  • Hallo Udo,


    klingt auch interessant, passt aber bei mir leider nicht zum Setup: Ich habe einen stand-alone VDR im Wohnzimmer. Nur bei Bedarf greife ich auf's Archiv auf'm Server im Arbeitszimmer zurueck, also bei mir wird der Server (der auch gleichzeitig mein normaler Desktoprechner ist) nur ab und an vom WZ aus per WoL geweckt. Also soll auch nur dann die Schlummerschaltung aktiv sein...
    Ich bastel mal an dem Perl Script rum, der Ansatz mit laufendem X-Server scheint mir perfekt zu sein. Da ich nicht der grosse (Perl) Script-Kiddie bin dauert es halt etwas... Aber ich poste dann mal meine Loesung (wenn sie denn so funzt wie ich will).


    Gruss+Danke,
    - berndl

  • So, hat etwas laenger gedauert, aber hier mal meine Loesung.


    Wie gesagt, es handelt sich um meinen Desktop im Arbeitszimmer, der gleichzeitig als .vdr Filmserver fuer den Wohnzimmer-VDR dient. Jetzt gibt es da 2 Szenarien:
    1.) Ich starte den Desktop im AZ ganz normal und moechte auch ganz normal damit arbeiten
    2.) Ich starte den Desktop vom VDR aus per WoL und solange der WZ-VDR laeuft soll der Desktop am laufen sein. Sollte der WZ-VDR abschalten, dann sollte irgendwann auch der Desktop runterfahren.


    Hier mal der Code fuer das shell-script:


    Gerade getested. Wenn ich den Desktop einschalte und mich innerhalb ca. 10min einlogge, dann bleibt er oben, ansonsten shutdown. Wenn ich ihn einschalte (ohne mich einzuloggen) und einer der Clients laueft, dann bleibt er auch oben. Scheint also zu funktionieren...


    Hier noch der Vollstaendigkeit halber die 'auto-shutdown-ips.dat':

    Code
    192.168.0.97
    192.168.0.96


    (also nur die IP-Adressen meiner Clients...)


    Gruss+Danke fuer die Tipps hier,
    - berndl


    PS: Das ganze in die /etc/init.d/bootmisc.sh eingetragen: '/home/berndl/test_shutdown.sh &' (script vorher mit chmod +x filename ausfuehrbar gemacht)

  • Hi Udo,


    noe, der Desktop laeuft ja nicht als normaler VDR (entweder als 'normaler' Rechner mit mir vor dem Bildschirm oder halt als 'ge-wake-upter Server' fuer Filme). Aber ich habe jetzt gerade noch mal ein bisschen rumprobiert. Es tut nicht so wie ich mir das gedacht hatte :motz2


    Ich muss wohl noch ein bissle weiter probieren... Komisch, vorhin sah das beim trocken-Test ganz gut aus...


    Gruss,
    - berndl

  • hmmm, irgendwas scheint mit der Abfrage 'if [ -e /var/run/gdm.pid ]' nicht so richtig zu funktionieren. Wenn ich das im obigen Script auskommentiere (den ganzen Block), dann faehrt die Kiste nach ein paar Minuten runter. Wenn ich's drin lasse, dann passiert gar nix...
    Gedacht ist diese Zeile ja nur um fest zu stellen, dass ich mich am PC eingelogged habe...
    Naja, muss ich mal weiter versuchen


    Gruss,
    - berndl

  • Ist logisch, der gdm startet ja auch immer, auch wenn noch niemand angemeldet ist.


    Du könntest die Ausgabe von who parsen, zumindest bei mir meldet er, dass ich auf tty7 angemeldet bin, und Konsole 7 ist der X-Server.


    Gruß,


    Udo

  • hmm, naja, die Idee war ja, ich wecke den Server per WoL vom Client aus, der haengt dann im GDM Anmeldebildschirm, und wenn dann nix weiter passiert, dann haengt alles nur noch vom aktiven Client ab.


    Also Preisfrage: Was ist der Unterschied, wenn die Kiste im GDM haengt oder ich mich angemeldet habe? Wie kriege ich das in das obige Script rein?


    Bin grad ein bisschen ratlos...


    Gruss,
    - berndl


    PS: Kann ich anstatt der gdm.pid etwas anderes abfragen, was 'danach' erst da ist? Also etwas das erst nach dem einloggen valide ist?

  • Hi Udo,


    super Sache, funktioniert! Und hat noch den Charme, dass ich mich von einem anderen Rechner per ssh einloggen kann (muss ich noch testen, sehe aber keinen Grund fuer Probleme) und das Script beendet sich sofort.


    Vielleicht bastel ich mir jetzt noch einen 'manuellen' shutdown per 'svdrpsend' vom Client aus dazu, aber das ist dann Zugabe.


    Also, vielen Dank!


    Gruss,
    - berndl


    PS: Hier noch mal das ganze (Script schiebe ich auch noch nach /usr/local/...):
    PPS: Eingetragen in die /etc/init.d/bootmisc.sh mit

    Code
    /home/berndl/test_shutdown.sh &


  • PPPS: Wenn mir jetzt noch jemand erklaeren koennte, was die Zeilen:

    Code
    while read user tty rest ; do


    Code
    if [ "${tty#tty[0-9]}" != "$tty" ] ; then


    Code
    done < <(who)


    denn genau machen? Ist schon >20 Jahre her, dass ich mit der Shell unter Unix mal was zu tun hatte...


    Gruss,
    - berndl

  • hi,


    ... der vollständigkeit halber:
    dieses skript benutze ich in meiner server. der ansatz ist ähnlich - die umsetzung benutzt aber andere tools...

    cu
    fossy
    -----------------------------------------------------------------
    VDR1: pentium m, aopen i855gmem-lfs / hauppauge nexus 2.2, technisat skystar2 / (im silverstone lascala lc11m-s) / debian lenny / e-tobi --> vdr 1.6.0 / kernel 2.6.28-etobi.3-686
    VDR2: D945GSEJT mit 2GB RAM + ... (budget) / debian lenny / e-tobi --> vdr 1.6.0 /

    -----------------------------------------------------------------
    meine klitzekleine homepage :arme hier

  • Zitat

    Originally posted by berndl
    PPPS: Wenn mir jetzt noch jemand erklaeren koennte, was die Zeilen:

    Code
    while read user tty rest ; do


    http://www.gnu.org/software/ba…shref.html#index-read-142


    read liest eine Textzeile, und zerlegt sie: Die erste Spalte kommt in $user, die zweite in $tty, und der gesamte Rest in $rest. Das ganze verpackt in die while-Schleife liest dann alle Textzeilen.


    Zitat
    Code
    if [ "${tty#tty[0-9]}" != "$tty" ] ; then


    http://www.gnu.org/software/ba…Shell-Parameter-Expansion


    Knapp gesagt, werden von $tty die ersten 4 Zeichen abgeschnitten, falls diese zum Muster tty[0-9] passen. Mit dem abschließenden Vorher-Nachher Vergleich kriegt man heraus, ob tatsächlich etwas abgeschnitten wurde.


    Zitat
    Code
    done < <(who)


    http://www.gnu.org/software/ba…x-process-substitution-90


    Das Kommando who wird ausgeführt, und seine Textausgabe als Eingabe für die while-Schleife, und damit für read verwendet. Funktioniert sehr ähnlich wie who | while ..., allerdings läuft hier die while-Schleife nicht in einer Sub-Shell, und dadurch existiert $login nach Ende der while-Schleife noch.


    Gruß,


    Udo

Jetzt mitmachen!

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