vdrshutdown optimieren

  • hi,


    ich möchte den vdrshutdown etwas erweitern, hier meine vdrshutdown:


    #!/bin/bash
    # $Id: vdrshutdown,v 1.10 2002/03/15 22:25:38 bistr-o-math Exp $
    NVRAMCMD=/usr/local/bin/nvram-wakeup
    $NVRAMCMD -ls $1
    if [ `ps -ef | grep -e "/2divx"| grep -c -v grep` -eq 1 ];then at now -f `/usr/local/src/VDR/svdrpsend.pl MESG Divx-Konvertierung läuft noch` && exit 1 ;fi
    #test -s /video/divx/JobQ && echo "Divx-Konvertierung läuft" && exit 1
    echo "VDR-Shutdown!!!" >> /var/log/messages
    echo $PIPESTATUS >> /var/log/messages
    echo $1 >> /var/log/messages
    echo "VDR-Shutdown!!!"
    echo $PIPESTATUS, echo $1
    # give commands to grub
    echo "Grubconfig"
    echo | grub --batch << EOF
    root (hd0,0)
    savedefault --default=2 --once
    quit
    EOF
    echo "ShutDown"
    #shutdown -r now


    leider klappt der if befehl noch nicht. anscheinend erlaubt er beim at now -f keine parameter für die svdrpsend.pl.


    außerdem möchte ich noch fehler bei nvram anbfangen. d.h. wenn dort ein fehler auftritt, soll er nicht runterfahren.


    kann mir jemand helfen?


    cu atosch

  • Hi,


    sowas würde ich einfach mit


    Code
    pgrep 2divx && (/usr/local/src/VDR/svdrpsend.pl MESG Divx-Konvertierung läuft noch; exit 1)


    erschlagen.


    Dasselbe mit nvram:

    Code
    nvram ... || exit 1



    wobei && den nachfolgenden Teil ausführt, wen der exitcode des vorangehenden 0 war
    || entsprechendes bei 1


    Viel Erfolg!

  • Zitat

    Original von RaK
    lagere doch den svdrpsend.pl MESG ... Part in in extra Script aus und starte das dann aus deinem vdrshutdownscript mit an now -f scriptname.


    och nö, dann muss ich ja für jede message n extra skript schreiben. wofür gibts parameter ;)


    best-beer


    super, vielen dank, genau das habe ich gesucht.


    cu atosch

  • erstens, wuerde ich empfehlen, statt

    Code
    echo message >>/var/log/messages


    den Befehl

    Code
    logger -t vdrshutdown message


    zu verwenden. (erstens, brauchst du dafuer keine root Rechte und zweitens kannst du dir keinen
    Kopf darum zu machen, ob die logs wirklich in /var/log/messages sind oder woanders.)


    Ein weiterer Punkt:


    es sollte auf jeden Fall ueberprueft werden, ob der shutdown gemacht wird oder nicht bevor
    nvram-wakeup ausgefuehrt wird.


    Der Grund:


    Mal angenommen, du hast ein board, welches einen reboot benoetigt.
    du startest das Skript das erste mal. die neuen Werte werden ins nvram geschrieben und
    nvram-wakeup sagt, dass ein reboot notwendig ist. anschliessend entscheidet die if-Abfrage,
    dass wir gar nicht runterfahren wollen.
    Wenn nun das naechste mal das Skript vdrshutdown ausgefuehrt wird, wird nvram-wakeup mit
    den selben Werten gestartet und braucht im nvram nichts zu aendern. folglich sagt es, dass kein
    reboot notwendig ist und das Skript macht keinen reboot. Also wacht der Rechner nicht zur eingestellten Zeit auf.


  • vorsicht hier: bei Erfolgreichem Ausfuehren von nvram-wakeup kann der exitcode sowohl 0 als
    auch 1 sein. Bei einem Fehler ist er 2.

  • ich wuerde vorschlagen, das (original-) Skript so zu modifizieren:


  • Nun, was haltet ihr davon:



    so oder so aehnlich koennte ich es in nvram-wakeup aufnehmen.

  • Zitat

    Original von atosch
    och nö, dann muss ich ja für jede message n extra skript schreiben. wofür gibts parameter ;)


    at erlaubt aber IMHO keine Parameter für das aufgerufene Script. Sorry scheint die einzigste mglichkeit zu sein. Kannst ja noch so einbauen, dass die Nachricht mit echo in ne Datei geschrieben wird, aus der die Nachricht dann ausgelesen wird.


    Wenn du rausfindest wie at dem script nen Parameter mitgeben kann, dann sag mir bescheid.

  • hi, das problem ist folgendes: ich habe mit einer case abfrage es nicht geschafft den grub (der seit suse 8.x standard bootmanager ist) anzusteuern.


    er sagt mir dann immer unexpected end of file. hast du da ne lösung?


    cu atosch

  • Zitat

    Original von atosch

    Code
    echo | grub --batch << EOF
    root (hd0,0)
    savedefault --default=2 --once
    quit
    EOF


    hi, das problem ist folgendes: ich habe mit einer case abfrage es nicht geschafft den grub (der seit suse 8.x standard bootmanager ist) anzusteuern.


    shon mal sowas probiert:


    Code
    echo "root (hd0,0)
    savedefault --default=2 --once
    quit" | grub --batch
  • Zitat

    Original von Bistr-o-Math
    shon mal sowas probiert:


    Code
    echo "root (hd0,0)
    savedefault --default=2 --once
    quit" | grub --batch


    also ich hab jetzt mal den case teil kopiert und wollte es ausprobieren. er kommt nichmal dahin. er sagt mir nämlich jetzt:


    ./testshutdown: line 7: case 2 in: command not found
    ./testshutdown: line 8: syntax error near unexpected token `0 # all went ok - new date and time set'
    ./testshutdown: line 8: ` ( 0 # all went ok - new date and time set'


    er findet case nicht? was läuft denn jetzt schief?


    cu atosch

  • Zitat

    Original von atosch


    also ich hab jetzt mal den case teil kopiert und wollte es ausprobieren. er kommt nichmal dahin. er sagt mir nämlich jetzt:


    ./testshutdown: line 7: case 2 in: command not found


    was fuer 'ne bash hast du denn?


    Zitat


    ./testshutdown: line 8: syntax error near unexpected token `0 # all went ok - new date and time set'
    ./testshutdown: line 8: ` ( 0 # all went ok - new date and time set'


    das soll natuerlich '0) ...' heissen.

  • Zitat

    Original von Bistr-o-Math



    was fuer 'ne bash hast du denn?


    bash --version
    GNU bash, version 2.05b.0(1)-release (i586-suse-linux)
    Copyright (C) 2002 Free Software Foundation, Inc.



    Zitat

    das soll natuerlich '0) ...' heissen.


    hatte ich zuerst dann hab ich in die man bash geguckt und da stand:


    case word in ( pattern .


    daher hab ichs geändert. hat aber nichts an der fehlermeldung geändert.


    cu atosch


    p.s. meine testshutdown:


    #!/bin/bash
    # $Id: vdrshutdown,v 1.10 2002/03/15 22:25:38 bistr-o-math Exp $
    pgrep 2divx && (/usr/local/src/VDR/svdrpsend.pl MESG Divx-Konvertierung läuft n$
    NVRAMCMD=/usr/local/bin/nvram-wakeup
    $NVRAMCMD -ls $1


    case $PIPESTATUS in
    ( 0 # all went ok - new date and time set
    #shutdown -h now
    EXITSTATUS=0
    ;;
    ( 1 # all went ok - new date and time set.
    #
    # *** but we need to reboot. ***
    #
    # for some boards this is needed after every change.
    #
    # for some other boards, we only need this after changing the
    # status flag, i.e. from enabled to disabled or the other way.



    # For plan A - (Plan A is not supported anymore---see README)
    #
    # For plan B - (don't forget to install the modified kernel image first)
    #
            
    echo "root (hd0,0)
    savedefault --default=2 --once
    quit" | grub --batch
            
    #shutdown -r now
    EXITSTATUS=0
    ;;
    ( 2 # something went wrong
    # don't do anything - just exit with status 1
    EXITSTATUS=1
    ;;
    esac


    echo "VDR-Shutdown!!!"
    echo $PIPESTATUS, echo $1

  • Zitat

    Original von atosch


    hatte ich zuerst dann hab ich in die man bash geguckt und da stand:


    case word in ( pattern .


    hier steht:

    Code
    case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac


    d.h. es kann entweder '0)' oder '(0)' sein. (Ich habe unten wieder auf '0)' geaendert.

    Zitat

    p.s. meine testshutdown:


    Code
    [#!/bin/bash
    # $Id: vdrshutdown,v 1.10 2002/03/15 22:25:38 bistr-o-math Exp $
    pgrep 2divx && (/usr/local/src/VDR/svdrpsend.pl MESG Divx-Konvertierung läuft n$


    hier ist das Ende der Zeile verlorengegangen... Ist das Das Problem?
    Fehlermeldung: unexpected end of file
    (da die schliessende Klammer nie gefunden wurde)


    Zitat


    hier habe ich mangels grub auf meinem system einfach 'cat' statt 'grub --batch' genommen.


    Zitat


    hier macht 'echo $PIPESTATUS' nicht viel Sinn, denn das waere der Exitstatus des Befehls 'echo "VDR-Shutdown!!!"'


    ich habe im Anhang ein Skript, das auf jeden Fall funktioniert. (ich habe die Dateiendung auf .txt geaendert, da ich sonst nicht anhaengen konnte)

  • hi,


    Zitat

    hier ist das Ende der Zeile verlorengegangen... Ist das Das Problem?
    Fehlermeldung: unexpected end of file
    (da die schliessende Klammer nie gefunden wurde)


    nö das ist nur beim kopieren aus pico verlorengegangen ;)


    Zitat


    ich habe im Anhang ein Skript, das auf jeden Fall funktioniert. (ich habe die Dateiendung auf .txt geaendert, da ich sonst nicht anhaengen konnte)


    ich hab zwar keine ahnung warum, aber mit diesem skript kennt er case.


    optisch kann ich keinen unterschied zu meiner version feststellen.


    jetzt hab ich noch ein problem:


    das svdrpsend wird ausgeführt das anschließende exit 1 aber nicht.


    weißt du zufällig woran das liegen könnte?


    cu atosch

  • Zitat

    Original von Bistr-o-Math
    warum muss es ueberhaupt at sein? Es soll eh sofort ausgefuehrt werden. und es ist nichts,
    was ewig dauern wuerde...


    Weil ein Script dass vom VDR intern aufgerufen wird (commands.conf, vdrshutdown, ...) wenn es über svdrpsend.pl auf den VDR wieder zugreifen will total haengt. das geht aber über at.

Jetzt mitmachen!

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