Upstart LIRC Befehl bei shutdown ausführen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    da mir im RaspBMC Unterforum keiner helfen konnte und da RaspBMC ja auf Raspbian basiert, habe ich die Hoffnung hier eher jemanden zu finden der sich mit der Materie auskennt.

    Ich habe ein kleines upstart-Skript geschrieben, dass beim shutdown ausgeführt werden soll.
    Leider funktioniert es nur in höchstens 1% der Fälle, ansonsten scheint der Pi runterzufahren, bevor irsend gesendet hat.

    Hier mein kleines Skript (/etc/init/ir-shutdown.conf):

    Hat jemand eine Idee, wie ich sicherstellen kann, dass dieses Skipt nicht durch den shutdown abgeschossen wird, bevor es den Befehl über LIRC gesendet hat?

    Original Post:
    https://www.forum-raspberrypi.de/Thread-lirc-be…=53855#pid53855

    (ich hoffe dieser Doppelpost ist erlaubt, ansonsten bitte das Original Thema in dieses verschieben oder löschen...)

    Viele Grüße
    MasterPi

  • Eine Möglichkeit wäre, eine Auswertung des Exitcode mit in ein Script einzubauen. Das könnte dann etwa so aussehen:

    Code
    Befehl_1 && Befehl_2



    Damit wird sichergestellt daß, Befehl_2 erst nach erfolgreicher Abarbeitung ( ohne Fehler = exitcode 0 ) des Befehl_1, ausgeführt wird.

    Einmal editiert, zuletzt von Fliegenhals (13. Januar 2014 um 18:37)

  • Vielen Dank! Hatte gar nicht daran gedacht, daß die Befehle gestartet werden, aber nicht auf die Rückgabe gewartet wird.
    Das scheint doch zumindest Besserung gebracht zu haben. :thumbs1:
    Ich habe mehrere Tests aber 100%ig funktioniert es leider trotzdem noch nicht... Jedoch eine deutliche Verbesserung!

    So sieht das Skript jetzt aus:

    Code: Alles markieren

    Code
    #
    # ir-shutdown
    #
    
    
    start on starting rc
    task
    exec /usr/bin/irsend SEND_ONCE tv KEY_POWER && /bin/sleep 1

    Einmal editiert, zuletzt von MasterPi (13. Januar 2014 um 21:29)

  • also nach längerem Betrieb muss ich doch leider wieder auf 99.999% korrigieren daß es nicht funktioniert. :(

    Anscheinend wird der Skript gar nicht gestartet beim shutdown.
    Habe ein pre-start angefügt daß eine Ausgabe mit echo in ein log file schreibt. Das tuts auch nur wenn ich das Skript von Hand starte.

    Hat jemand eine Idee woran das liegen könnte?

  • Idee:
    du schreibst deinen eigenen shutdown - Befehl:

    Also: in den Pfad "/usr/local/sbin" kommt dein shutdown (ausführbar machen).
    Da steht dein ir-shutdown-geraffel drin..., am ENDE deines Scripts rufst du das "echte" shutdown auf (das liegt unter /sbin)

    WICHTIG: Deine Pathvariable sollte so aussehen wie hier (beachte die Reihenfolge der Pfade, die werden genau in dieser Reihenfolge durchsucht!):

    Code
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin


    damit dein Code zuerst gefunden wird...

    :thumbs1:

    PS: für die Verwendung des "halt" - Befehls musst du das auch machen. Somit bietet sich die Variante an, dein ir - zeuch in eine gesonderte Datei zu schreiben und diese aus den gefakten Systemkommandos heraus aufzurufen.

  • Vielen Dank für den Tipp Zentris! Werde ich morgen mal probieren. Das klingt nach einem funktionablen Workaround :)

    Den 'halt' kann ich mir evtl sogar sparen, weil im normalen Betrieb (Raspbmc) dürfte das eher nicht vorkommen, wenn ich das richtig verstanden habe. Ruft nicht auch der shutdown am ende ein halt auf?

  • Moin,

    wie wäre es über ein Script in /etc/init.d

    Code
    update-rc.d irscript start 01 2 3 4 5 . stop 99 0 1 6 .

    Sofern das gesendete iR Signal auch geeignet ist die Glotze anzuschalten, wird diese bei einem Hochfahren des RPi mitgestartet. Gegebenenfalls die start Parameter anpassen.

    Bei einem reboot wird die Glotze aber dann auch ab.- und wieder eingeschaltet.

    Bye

    Jürgen

    Einmal editiert, zuletzt von rpivpn (13. Februar 2014 um 16:55)

  • Zentris: kann ich denn irgendwie die Parameter (-h / -r, NOW) an /sbin/shutdown durchreichen?
    EDIT: ok habe es herausgefunden: /sbin/shutdown $1 $2 . Das funktioniert! Vielen Dank nochmal! :D

    rpivpn: Danke! Für das Anschalten habe ich schon ein anderes etwas komplexeres Skript (das u.a. auch den richtigen Kanal ein- und Ton ausschaltet, da die Glotze sonst pfeift, wenn kein Tonsignal kommt). Wie lautet denn der Befehl um das Skript nur beim shutdown zu starten? Mir ist die Syntax vom update-rc nicht ganz klar. Runlevel '01' ? '99'? Und der Punkt .?

    Einmal editiert, zuletzt von MasterPi (13. Februar 2014 um 22:44)


  • Zentris: kann ich denn irgendwie die Parameter (-h / -r, NOW) an /sbin/shutdown durchreichen?

    Klar: siehe auch http://netzmafia.de/skripten/unix/unix8.html

    Also das "Durchreichen" der kompletten Aufrufparameter erfolgt mit " $* "... dass sollte also genügen ;)

  • Es gibt noch den "init 0" bzw. "init 6" Befehl zum runterfahren/reboot (Runlevel), das ist aber nicht sehr gebräuchlich... Wird der vielleicht verwendet?

    Ansonsten weiss ich es nicht, da ich kein RaspBMC betreibe, kann ich auch nicht nachsehen...

    Ach ja: Wenn das RaspBMC Zeuchs es "ordendlich" macht, verwenden die die Befehle mit vollem Pfad, dann ist es natürlich Essig mit den "gefakten" Befehlen.
    Such doch mal in dem ganzen Script-Geraffel nach den Befehlen "shutdown", "halt" usw...

    Also:

    Code
    find <startDir> -type f -name '*.sh' | xargs grep shutdown

    Das " -name '*.sh' " ggf. noch modifizieren oder gleich ganz weglassen, dann sucht er allerdings auch in den Binaries, aber das geht schon, dauert halt etwas. Das Ergebnis ggf. in eine Datei umlenken, damit man besser durchsuchen kann....

    Wenn du das als "root" machst, kommen nicht so viele Meldungen, dass eine Datei/Verzeichnis nicht geöffnet werden konnte...

  • Danke für die ausführliche Erklärung, leider habe ich es nicht geschafft damit etwas zu finden.
    Habe nun die Skin-Datei (unter /opt/xbmc-bcm/xbmc-bin/share/xbmc/addons/skin.confluence/720p/DialogButtonMenu.xml) für das Menu angepasst, damit sie anstatt XBMC.ShutDown() bzw .Reset() aufzurufen (wovon ich keine Ahnung habe was die genau machen), mit XBMC.System.Exec() mein Skript aufruft.
    Außerdem habe ich auf die gleiche weise die XBMC Keymap angepasst (/home/pi/.xbmc/userdata/keymaps/remote.xml) um durch den Power-Knopf auf der Fernbedienung herunterzufahren.

    Einmal editiert, zuletzt von MasterPi (18. Februar 2014 um 04:16)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!