start\stop script

  • Hi,
    ich habe kürzlich von meinem PI B mit RASPMC auf einen PI2 mit OSMC gewechselt, es läuft so weit auch alles bestens. Auf dem PI B hatte ich mithilfe dieses Tutorials (http://blog.nadnerb.co.uk/?p=11) ein Script mit dem ich Hyperion Ein und Ausschalten konnte, ich habe nun ­versucht es auch auf dem neuen PI zu installieren. Ich habe lediglich den Pfad von "/home/pi/toggleHyperion.sh" zu "/home/osmc/toggleHyperion.sh" geändert, wenn ich das Script nun starte bekomme ich folgende Meldung:

    Gibt es eine Möglichkeit das Script so anzupassen das es auch auf OSMC läuft?

    Und ich habe noch ein Problem, ich bekomme es leider nicht hin den PI in der Windows Netzwerkumgebung zu finden, hatte mal gelesen das es mit OSMC noch nicht möglich ist, hat sich das mittlerweile geändert?

  • Das Problem ist, dass RaspBMC noch auf einer älteren Debian Version 7 (wheezy) basiert, wohingegen OSMC bereits auf eine aktuellere Version 8 (jessie) setzt, welche nicht mehr das klassische/alte SysVinit init Verfahren nutzt sondern systemd. Durch das neue systemd wird u.a. das booten erheblich beschleunigt.

    /sbin/initctl ist also wie der Dateiname verrät noch für das ältere init Verfahren (ctl steht für control) und nur bis einschließlich Debian_7 vorhanden.

    Es gibt zwar ein paar initctl Workarounds, allerdings glaub ich nicht das man das hier braucht. Sinnvoller wäre es das toggleHyperion.sh Script für Debian_8 anzupassen. Dazu brauch man halt nur zu wissen was das Script überhaupt macht..

    Anhand dessen lässt sich vermuten das es eigentlich nur ein anderes Script anspricht um zu prüfen ob der Prozess "hyperion" läuft.
    Die curl Befehlszeile ist bei beiden Aufrufen beinahe identisch bis auf "Disabled" oder "Enabled".
    Dann wird ebenfalls initctl genutzt um hyperion zu beenden bzw zu starten (jenachdem ob der Prozess bereits läuft oder nicht).

    Wie immer gibt es mehrere Wege, es gibt immer mehrere Möglichkeiten - auch hier. Der vermutlich sinnvollste wäre das Programm service zu verwenden um Dienste wie hyperion zu steuern.
    Änder also mal das Script wie folgt ab und probier es dann noch mal:

    (da sich beim curl aber auch nur ein kleines Wort ändert würde ich diesen Part auch anders gestalten, auch das prüfen ob der Prozess läuft ist imho zu umständlich, aber dazu später ggf mehr)

    Diese Anpassung sollte übrigens auch für Debian_7 funktionieren.

  • Ich habe das Script jetzt so angepasst wie du es geschrieben hast so weit funktioniert es jetzt auch, allerdings bleiben die LEDs leider an, wenn ich Hyperion stoppe, und zwar an der Stelle wie sie zuletzt waren werden also nicht mehr angesteuert allerdings auch nicht wirklich ausgeschaltet. Meine Überlegung wäre jetzt in das Script einen Befehl einzufügen der die LEDs ausschaltet bzw. Farbwert Schwarz schaltet bevor der Hyperion Services gestoppt wird, wäre das möglich? Und wenn ja, wie? Habe leider kaum Ahnung vom Programmieren.

  • Log dich mal bitte über die Konsole (ssh) ein und poste die Ausgabe folgendes Befehls:

    Code
    bash -x /home/pi/toggleHyperion.sh

    Und auch von:

    Code
    ps aux | grep -v grep | grep hyperion
  • Ich gehe mal davon aus du meinst

    Code
    bash -x /home/osmc/toggleHyperion.sh


    wenn ich das mache bekomme ich folgendes

    Und bei dem zweiten Befehl bekomme ich folgende Meldung

    Code
    root      1196  6.0  2.4 100176 18536 ?        Sl   09:31   0:00 hyperiond /etc/hyperion.config.json


    Allerdings nur wenn der Hyperion Service an ist sonst kommt gar keine Meldung.

  • Ja sorry, meinte ich.

    Demnach scheint es zu funktionieren - Wenn der Prozess läuft wird er gestoppt , wenn nicht wird er gestartet.
    Wieso das bei dir nicht geht kann ich nicht sagen - sofern das Script ausgeführt wird liegt das Problem nicht an dem Script sondern an was anderem...


    Da ich die Prüfung ob der Prozess läuft aber etwas ungünstig finde, könnte man das wie folgt abändern:

    "! -z" besagt soviel wie: wenn nicht (!) leer (z). Wenn also die Rückgabe von $(ps aux | grep -v grep | grep hyperion) nicht leer ist läuft der Prozess, 'else' er läuft nicht und wird gestartet...

    Wichtig wäre aber auch das der auszuführende Benutzer sudo Rechte ohne Passwordabfrage besitzt, was ich gerade aber nicht weiß ob das der Fall ist. Das kannst du wie folgt überprüfen:

    Code
    grep osmc /etc/sudoers

    Wenn dort nichts zurückgegeben wird hat der Benutzer keinen Eintrag und somit auch nicht das benötigte Recht... Falls aber doch etwas ausgegeben wird kommts halt drauf an wie der Eintrag aussieht - steht da etwas von wegen NOPASSWD benötigt der Benutzer kein Password um sudo zu verwenden. Dann darf er den Dienst auch starten/stoppen (das darf nicht jeder, sondern eigentlich nur root (sudo = super user do = root)

  • Ich habe das Script angepasst und es funktioniert auch, es bleibt jedoch dabei das die LEDs trotzdem leuchten. Welche Vorteile bringen die Änderungen eigentlich? Wie gesagt kenne mich noch nicht so damit aus und würde es gerne besser verstehen.

    Der Befehl

    Code
    grep osmc /etc/sudoers


    gibt folgende Meldung aus

    Code
    grep: /etc/sudoers: Permission denied
  • Der Vorteil ist das es direkt anhand der Prozessliste geprüft wird und nicht abhängig eines anderen Scripts ist.

    Wie gesagt, wenn das Script ansich funktioniert, nur hyperiond anscheint nicht dein LED-Streifen ausschaltet, liegt das Problem wo anders nicht an diesem Script selbst.
    Es könnte zB sein das bei dir SPI nicht enabled ist. Dann müsste in /boot/config.txt der Eintrag dtparam=spi=on hinzugefügt und rebootet werden.
    Es könnte aber auch an einer Einstellung in /etc/hyperion.config.json liegen..

    Ich kenne aber nicht dein Setup, welchen LED-Controllerchip du verwendest oder wie du es installiert hast o.ä... Von daher kann ich jetzt nur raten was sonst noch nicht passen könnte... Wie gesagt hat das jetzt meiner Meinung nach nichts mehr mit dem Script ansich etwas zu tun


    Denn grep Befehl mit sudo davor ausführen.

  • Du kannst die SD in deinen SD-Kartenleser am Windows PC anschließend womit du auch das Image geflasht hast, dort wird dir dann die einzig von Windows les/beschreib-bare FAT32 Partition angezeigt, nämlich /boot/ in der sich die config.txt befindet.
    Wichtig ist das du die Datei mit einem Linux-kompatiblen Editor bearbeitest, da Windows einen anderen Zeilenumbruch nutzt den Linux aber nicht versteht. Also mit z.B. notepad++ oder Proton oder UltraEdit usw. Nicht aber mit dem normalen notepad und schon gar nicht mit Wordpad!

  • Ja habe das Problem gelöst, indem ich in das Script das du mir erstellt hast, noch folgende Zeile eingefügt habe.

    Code
    hyperion-remote --priority 50 --color black --duration 5000

    Es sieht jetzt so aus


    Jetzt funktioniert es wie gewünscht, die LEDs werden wie gewünscht ausgeschaltet :bravo2:

    Besten Dank nochmal für deine geduldige Hilfe:danke_ATDE:

  • Vielen Dank für den Thread. Da ich auch OSMC benutze, werde ich auf jeden Fall auch dieses Start/Stop Script benutzen.
    Warum hast du in deinem Script den Befehl "hyperion-remote --priority 50 --color black --duration 5000" verwendet und nicht einfach "hyperion-remote -c black". Hat das irgend einen Hintergrund mit der priority 50 und duration 5000?

    Einmal editiert, zuletzt von spall01 (15. April 2015 um 08:19)

Jetzt mitmachen!

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