SH-Shutdownscript führt bei automatischem Aufruf aus VDR keinen Perl-Code aus - Warum?

  • Hallo,


    ich habe kleine Schwierigkeiten mit Perl/SH...


    Beim Versuch, mein Shutdown-Skript für den Mt-Daapd-Server zu erweitern und c't-vdr konformer zu machen wird das Perl-Script nicht mehr ausgeführt.


    Folgende Konstellation:


    Beim shutdown wird das sh-Script aufgerufen (/usr/share/vdr/shutdown-hooks/S90.custom):

    Code
    TRY_AGAIN=`perl /usr/local/scripts/get_shutdown_time.pl`; 
    echo "TRY_AGAIN=$TRY_AGAIN" 
    exit $TRY_AGAIN;


    Die Ausgabe ist eine Variablendefinition (als String) , die vom aufrufenden Script dann ausgeführt wird und festlegt, ob direkt oder in TRY_AGAIN Minuten runtergefahren werden soll.


    Das Script funktioniert auch prächtig:


    #> sh /usr/share/vdr/shutdown-hooks/S90.custom

    Code
    TRY_AGAIN=6


    Auch, wenn ich es als Benutzer "vdr" ausführe:


    #> sudo -u vdr sh /usr/share/vdr/shutdown-hooks/S90.custom

    Code
    TRY_AGAIN=6


    Im SysLog gibt er mir brav - wie im Perl-Skript vorgesehen - den Grund aus, warum er erst in 6 Minuten runterfahren will:

    Code
    Oct 12 06:48:56 fliewatueuet shutdown-check: Überprüfe, ob noch Prozesse laufen oder Benutzer angemeldet sind.
    Oct 12 06:48:57 fliewatueuet shutdown-check: Still active: SSH (root root )  Shutdown-Retry in 6 min


    Wenn jetzt aber nicht ichim Terminal, sondern der VDR-shutdown-Prozess das sh-Script starte, dann wird der Code des sh-Scripts zwar ausgeführt, nicht aber das Perl-Script.


    Ich habs über alle möglichen Wege versucht: er scheint gar nicht ins Perl-Script zu hüpfen.


    Woran kann das liegen?


    Noch kurz zur Umgebung:
    #> ls -l /usr/share/vdr/shutdown-hooks/S90.custom
    lrwxrwxrwx 1 root root 34 11. Okt 18:08 /usr/share/vdr/shutdown-hooks/S90.custom -> /etc/vdr/shutdown-hooks/S90.custom


    #> ls -l /etc/vdr/shutdown-hooks/S90.custom
    -rw-r--r-- 1 root root 850 12. Okt 06:44 /etc/vdr/shutdown-hooks/S90.custom
    (Ich hatte hier die Rechte mal auf ugo+x gedreht, macht keinen unterschied)



    #> ls -l /usr/local/scripts/get_shutdown_time.pl
    -rwxr-xr-x 1 root root 6177 11. Okt 21:07 /usr/local/scripts/get_shutdown_time.pl



    Und zu guter letzt - falls der Fehler wider Erwarten doch am Script selbst liegen sollte, das Script:



    Für jeden Hinweis dankbar,


    Hannes


    robbitobbi://Scenic xB @ 866MHz/~Nexus2.1 - Budget TT 1.0 (Empfangs-VDR)
    fliewatueuet://ScenicxB @ 800MHz/~i810fb-xinelibout (Client)

  • Hallo Steffen,
    danke für den Tip. Den gesamten Pfad hatte ich eingegeben, /usr/bin/perl in meinemm Fall. Es zeigt sich jedoch das gleiche Verhalten: Als Benutzer VDR im Terminal aufgerufen läuft das perl-script im sh-script; von dem Programm VDR aufgerufen (das vom Benutzer VDR ausgeführt wird) läuft nur da sh-script, nicht jedoch das darin eingebundene perl-script.


    Ich vermute, es hat etwas damit zu tun, das ich einmal in der bash starte (Terminal via Putty), und dann automatisch?


    Hmmmmm...


    Hannes


    robbitobbi://Scenic xB @ 866MHz/~Nexus2.1 - Budget TT 1.0 (Empfangs-VDR)
    fliewatueuet://ScenicxB @ 800MHz/~i810fb-xinelibout (Client)

  • Moin,


    ich habe ähnliche Probleme mit den Shutdown-Skripts vom extb. Die Ursache habe ich gefunden, indem ich mir alle Informationen bei der Ausführung des Perl-Skriptes habe ausgeben lassen. In Deinem Fall ginge es evtl. so:


    Code
    TRY_AGAIN=$(perl /usr/local/scripts/get_shutdown_time.pl 2>&1)
    RETURN_CODE=$?
    echo "Return code: ${RETURN_CODE}"
    echo "Try again: ${TRY_AGAIN}"
    exit $TRY_AGAIN;


    Damit bekommt man die Meldungen mit, die nach STDERR - also 2 - gehen und nicht nur STDOUT. Der Return Code enthält evtl. auch interessant Informationen.


    Gruß
    Marcus

    VDR-User #985


    SW: Debian Sid, e-Tobi's VDR 1.6.0, vdr-sxfe mit VDPAU :strike1
    Plugins: devstatus, director, dvd, extb, femon, graphlcd, lastfm, mp3, mplayer, osdpip, osdteletext, premiereepg, skinenigmang, streamdev-server, sysinfo, text2skin, tvonscreen, vcd, vdrrip, webvideo, xineliboutput
    HW: Silverstone LC17, P5Q SE, C2D E7300, 1GB RAM, 500GB Platte, Hauppauge DVB-S rev1.6, TT 3200

  • Hallo,


    okay, das klingt nach einem guten Ansatz. Ich habe von hieraus keinen Zugriff auf den VDR, werde es aber Zuhause versuchen und etwaige Erfolge hier melden!


    Danke,


    Hannes


    robbitobbi://Scenic xB @ 866MHz/~Nexus2.1 - Budget TT 1.0 (Empfangs-VDR)
    fliewatueuet://ScenicxB @ 800MHz/~i810fb-xinelibout (Client)

  • Hallo,


    so, Dein Tip hat mir schonmal insoweit geholfen, dass ich wusste, wonach ich heute abend googlen muss...


    Leider hab ich aber nichts vergleichbares gefunden, und auch keine Erklärung, warum dieser Fehler jetzt (c't vdr7) auftritt und nicht in den Versionen davor...


    Naja.


    Der Perl-Fehler heißt:


    Code
    Insecure $ENV{PATH} while running setuid at /usr/local/scripts/get_shutdown_time.pl line 148.


    Und in Zeile 148 steht


    Code
    $shellcmd="smbstatus -b 2>/tmp/smberror.txt | sed -e '/(^ERROR.*)|(^messaging*.)/d' ";
    $shelloutput=`$shellcmd 2>&1`;


    Hat jemand einen Tip? Google wirft einige Ergebnisse aus, aber bei keinem konnte ich Paralellen zu meinem Problem finden...




    Hannes


    robbitobbi://Scenic xB @ 866MHz/~Nexus2.1 - Budget TT 1.0 (Empfangs-VDR)
    fliewatueuet://ScenicxB @ 800MHz/~i810fb-xinelibout (Client)

  • Hier ist beschrieben, wie ich das Problem bei mir in Verbindung mit dem extb Plugin gelöst habe, so dass es zumindest funktioniert. Das geht sicher auch noch intelligenter, aber ich verstehe nicht genau das Problem, welches dahinter steckt. Perl und Perl Security sind diesbzgl. leider ein Buch mit sieben Siegeln für mich.

    VDR-User #985


    SW: Debian Sid, e-Tobi's VDR 1.6.0, vdr-sxfe mit VDPAU :strike1
    Plugins: devstatus, director, dvd, extb, femon, graphlcd, lastfm, mp3, mplayer, osdpip, osdteletext, premiereepg, skinenigmang, streamdev-server, sysinfo, text2skin, tvonscreen, vcd, vdrrip, webvideo, xineliboutput
    HW: Silverstone LC17, P5Q SE, C2D E7300, 1GB RAM, 500GB Platte, Hauppauge DVB-S rev1.6, TT 3200

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!