VDR bleibt immer wieder hängen

  • Hallo,


    ich hab in der /etc/inittab u.a. folgenden Eintrag:
    #1:2345:respawn:/sbin/mingetty --noclear tty1
    2:2345:respawn:/sbin/mingetty tty2
    3:2345:respawn:/sbin/mingetty tty3
    4:2345:respawn:/sbin/mingetty tty4
    5:2345:respawn:/sbin/mingetty tty5
    6:2345:respawn:/sbin/mingetty tty6
    vdr:35:once:/video/inittab_startvdr.sh


    die inittab_startvdr.sh sieht so aus:
    #!/bin/sh
    /sbin/hdparm -i /dev/hdc


    cd /usr/local/src/vdradmin
    rm vdradmind.pid
    /bin/su vdr -c ./vdradmind.pl


    cd /usr/local/src/VDR
    ./runvdr


    und die runvdr:
    #VDRUSR="vdr"
    DVBDIR="/usr/local/src/DVB/driver"
    VDRPRG="/usr/local/src/VDR/vdr"
    VDRCMD="$VDRPRG -w 60 -s '/video/vdrshutdown.sh|tee /video/vdrshutdown.log' $* \
    -L /usr/local/src/VDR/PLUGINS/lib \
    -P prefermenu \
    -P 'osdteletext -r' \
    -P clock \
    -P 'tvtv -u user -p pass -e xxx@xxx.de -t 30' \
    -P 'vdrcd -c /misc/cdrom -c /misc/dvd -c /misc/cdfs -m /video/mount.sh' \
    -P vcd \
    -P dvd \
    -P 'mp3 -m /video/mount.sh' \
    -P 'mplayer -m /video/mount.sh -M /video/mplayer.sh' \
    -P weather \
    -P vdrmail \
    -P console \
    -P games \
    -P tictactoe \
    -P mlcd \
    "



    LSMOD="`/sbin/lsmod | grep -w '^dvb' | wc -l`"
    KILL="/usr/bin/killall -q -TERM"


    # Load driver if it hasn't been loaded already:
    if [ $LSMOD -eq 0 ] ; then
    (cd $DVBDIR; make insmod)
    fi


    while (true) do
    su -c "$VDRCMD" $VDRUSR
    if test $? -eq 0; then exit; fi
    date
    echo "restarting VDR"
    $KILL $VDRPRG
    sleep 10
    (cd $DVBDIR; make rmmod; make insmod)
    date
    done


    Ich hab in der commands.conf folgende EInträge:
    VDR restarten? :/video/vdrneustart.sh
    Standard Treiber? :/video/vdrneustart.sh STD
    RGB Treiber? :/video/vdrneustart.sh RGB
    YUV Treiber? :/video/vdrneustart.sh YUV
    YC Treiber? :/video/vdrneustart.sh YC
    Zeige akt. Treiber :ls -al /usr/local/src/VDR/runvdr | awk '{print $11}';sleep 2
    Rechner Reboot? :/sbin/reboot 2>&1; echo "Linux wird neu gestartet"
    Rechner Aus? :/video/vdrshutdown.sh | tee -a commands.conf.log
    Scanne Transponder :/usr/local/bin/vdrscan -c 2>/dev/null
    neue channels.conf scan.:/video/make_channels.conf.sh 1 120
    neue channels.conf inst.:cp /video/channels.conf /video/channels.conf.$$; cp /video/vdrchannels/channels.conf.new /video/channels.conf
    VDR Platten :df -h -t reiserfs -t ext3 > xx-dfree; csplit -s xx-dfree 2; cut -c23- xx00; echo " "; cut -c23- xx01; rm xx* -f
    Festplatten :df -h|awk '{print $4," ",$5," ",$6}'
    Log Messages per OSD :tail -n100 /var/log/messages
    Lösche VDR Messages :echo > /var/log/messages && echo "Messages gelöscht"
    DMA für hda aktiviereen :/sbin/hdparm -u1 /dev/hda && echo "DMA für hda an"
    Beende Mplayer :killall -9 mplayer && echo "Mplayer wurde Beendet"


    und die vdrneustart.sh
    /usr/bin/killall runvdr


    for i in $(ps -ef |grep -v "vdradmind.pl" | grep VDR | awk '{print $2}')
    do
    kill -9 $i
    done


    cd /usr/local/src/DVB/driver
    (make rmmod)
    case "$1" in
    STD)
    echo "##############################################"
    echo "lade Standard Treiber ..."
    echo "##############################################"
    ln -fs /usr/local/src/VDR/runvdr.STD /usr/local/src/VDR/runvdr
    ;;
    RGB)
    echo "##############################################"
    echo "lade RGB Treiber ..."
    echo "##############################################"
    ln -fs /usr/local/src/VDR/runvdr.RGB /usr/local/src/VDR/runvdr
    ;;
    YUV)
    echo "##############################################"
    echo "lade YUV Treiber ..."
    echo "##############################################"
    ln -fs /usr/local/src/VDR/runvdr.YUV /usr/local/src/VDR/runvdr
    ;;
    YC)
    echo "##############################################"
    echo "lade YC Treiber ..."
    echo "##############################################"
    ln -fs /usr/local/src/VDR/runvdr.YC /usr/local/src/VDR/runvdr
    esac


    /usr/local/src/VDR/runvdr



    Aber beim Ausführen der vdrneustart.sh Befehle (z.B. RGB Treiber) in VDR bleibt das System komplett hängen!!!



    Wer kann mir helfen?

    Gruss
    Uwe
    ----
    YaVDR 2.6.6, QNAP TS-453a, Octopus Net max S8

    Einmal editiert, zuletzt von uxtuner ()

  • Hi,


    Zitat

    Aber beim Ausführen der Befehle in VDR bleibt das komplett hängen!!!


    Meinst Du diese Befehle, die VDR neu starten sollen

    Zitat

    VDR restarten? :/video/vdrneustart.sh
    Standard Treiber? :/video/vdrneustart.sh STD
    RGB Treiber? :/video/vdrneustart.sh RGB
    YUV Treiber? :/video/vdrneustart.sh YUV
    YC Treiber? :/video/vdrneustart.sh YC


    Bin zwar kein Linux-Experte, aber ich denke mal, da runvdr/vdr das aufrufende Prog ist, wird es über diese Aufrufe selbst beendet; der Aufruf/Neustart muss unabhängig von 'sich selbst' erfolgen.
    Probier's mal mit 'at' (man at), also z.B.

    Code
    VDR restarten? : at now -f  /video/vdrneustart.sh


    wie man allerdings 'at -f' Argumente mit übergibt ?(


    Zitat

    cd /usr/local/src/vdradmin
    rm vdradmind.pid
    /bin/su vdr -c ./vdradmind.pl


    alternativ starten mit '/usr/local/src/vdradmin/vdradmind.pl --nofork &'

  • warum schiebst du der orginal runvdr nicht einfach ein neues script unter, in dem Du vorher angiebst was er zu laden hat ........


    commands.conf (damit änderst Du die vorgabe in der driver.sh), dannach ein:


    SETUP >RESTART (kannst es theoretisch auch noch mit dahinter schreiben, killall -9 vdr was auch immer, ist halt nicht so sauber ...)


    Code
    Standard Treiber? : perl -p -i -e "s/^CMD=.*/CMD="STD"/" /usr/local/src/VDR/driver.sh; grep "CMD=" /usr/local/src/VDR/driver.sh | cut -f 2 -d '"'
    RGB Treiber?      : perl -p -i -e "s/^CMD=.*/CMD="RGB"/" /usr/local/src/VDR/driver.sh; grep "CMD=" /usr/local/src/VDR/driver.sh | cut -f 2 -d '"'
    YUV Treiber?      : perl -p -i -e "s/^CMD=.*/CMD="YUV"/" /usr/local/src/VDR/driver.sh; grep "CMD=" /usr/local/src/VDR/driver.sh | cut -f 2 -d '"'
    YC Treiber?       : perl -p -i -e "s/^CMD=.*/CMD="YC"/"  /usr/local/src/VDR/driver.sh; grep "CMD=" /usr/local/src/VDR/driver.sh | cut -f 2 -d '"'


    runvdr (hier schieben wir der runvdr das neue script unter), das wird dann beim neustart von VDR sub aufgerufen ......


    Code
    ...
    sleep 10
    (cd /usr/local/src/VDR && ./driver.sh)
    date
    ....


    driver.sh könnte dann so aussehen, die rmmod commands, kannst du ggf noch in der runvdr belassen .... vor make insmod mußt Du dann halt nur die links rein braten, die Du benötigst ....



    ich gehe mal davon aus es geht hier nur um verschiedene driver (configurationen), also ist ein neuladen der kompletten runvdr garnicht nötig, ebend nur ein anderer Driver, dann dürfte das obsolete sein ....


    Code
    ln -fs /usr/local/src/VDR/runvdr.STD /usr/local/src/VDR/runvdr


    denke mal da standen eh nur die anderen driver drinnen, die er zu laden hatte? egal hat schon recht mit at gehts auch, da mußt du die at sachen dann aber auch jedesmal killen, da die einmal angeschupst sind immer wirken ....


    PS: Habe es nicht probiert, lasse aber die plugins auch von einer seperaten *.conf laden, müßte also theoretisch functionieren, da die driver.sh immer neu geladen wird ...


    by

  • sorry ist doch nicht ganz so correct, beim ersten aufruf der runvdr wird so wie oben, einfach der driver geladen, der gerade im dir liegt ...


    Code
    # Load driver if it hasn't been loaded already:
    if [ $LSMOD -eq 0 ]
    then
    	(echo "Load DVB driver"; cd $DVBDIR; make insmod)
    	if [ -x $PLUGIN-remote* ]
    	then
    		$DVBREM/av7110_loadkeys $DVBREM/hauppauge.rc5 > /proc/av7110_ir
    	fi
    fi


    müßte man da auch schon die driver.sh unter mogeln ... ansonnsten wird der geladen der zuletzt eingestellt wurde .......


    Code
    # Load driver if it hasn't been loaded already:
    if [ $LSMOD -eq 0 ]
    then
    (cd /usr/local/src/VDR; ./driver.sh)
    	if [ -x $PLUGIN-remote* ]
    	then
    		$DVBREM/av7110_loadkeys $DVBREM/hauppauge.rc5 > /proc/av7110_ir
    	fi
    fi


    wie oben erwähnt, muß dann das entladen der driver (&& sleep) in der runvdr selbst stehen ... sonnst hat Du beim erst Aufruf schon ne pause drinnen ...



    die "echos" kannst du rausnehmen, die kommen eh nicht im osd an ....



    so sollte es dann passen ........


    by

  • wer lesen kann ist klar im vorteil .........


    egal hat schon recht mit at gehts auch, da mußt du die at sachen dann aber auch jedesmal killen


    man atq (at -l)


    atrm JOBNUMMER


    by

  • Zitat

    Original von anonymous
    wer lesen kann ist klar im vorteil .........


    ok ;)


    Werde mal meine scripts entsprechend umstellen.


    Nur - wieso findet vdr das dvb device nicht????

  • poste mal Deinen ganzen Code (komplett) mal schauen, Du mußt dann auch erst einmal die Prozesse finden in "at" die zu killen sind, bevor ein neuer job eingetragen wird.


    weiß auch nicht so genau, der Code von oben (driver.sh) geht bei mir jedenfalls bestens.


    versuche es doch mal :-)), oder traust Du Dich nicht .... *ggg*


    wie gesagt nicht sicher, aber aus der commands.conf heraus ist es möglich (vdr|runvdr) zu killen, den Driver bekommst Du "vermutlich" nicht ohne weiteres entladen, schaue mal in Deinen *.log ....


    Denke mal das ist dann auch der Grund, das er kein Device finden kann, da blockiert. Wie gesagt poste doch mal alles, oder teste mal die Scripts von oben.


    by

  • Hi,


    vielleicht ein anderer Lösungsansatz bzgl. VDR-Neustart und Treiber entladen; so kann dann über commands.conf auch runvdr gekillt werden.


    Ich starte 'runvdr' in der 'inittab' als 'respawn', so das bei Komplettabsturz (dvd-plugin oder so) immer sofort neu gestartet wird. Dafür sind 2 kleine Ergänzungen im runvdr-Script nötig:


    1. um an VDR rumzubasteln, obwohl runvdr immer neu anläuft, als erstes im Script

    Code
    ...
    # $Id: runvdr 1.9 2002/03/16 16:22:12 kls Exp $
    
    
    # -> VDR temp. offline (inittab*respawn) <-
    #while (true) do sleep 10; done
    
    
    ...


    Bastelanleitung:
    ''#" vor while wird entfernt -> killall vdr -> basteln/installieren/testen/wasauchimmer -> "#" wieder rein -> killall runvdr -> voila.


    2. VDR & DVB wird immer entladen, wenn DVB-Treiber schon geladen


    zum Testen von runvdr mit Outputmeldungen einfach 'runvdr' doppeln, von Hand starten (natürlich nur, wenn org. 'runvdr' im 'Bastelmodus'


    Also, bis jetzt kommt VDR mit dieser Methode immer wieder hoch; was mir noch fehlt ist ein Restartzähler ab Rechnerneustart, und nach xx Restarts -> Shutdown (für alle Fälle).

Jetzt mitmachen!

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