Script starten bzw beenden mit Tatser

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

    Folgendes habe ich vor:

    Tastendruck->Script wird ausgeführt->Tastendruck->Script wird beendet.

    Mein Firefox reagiert nicht auf die Anweisung formatierten Code einfügen, deswegen schreibe ich direkt hier rein

    while true;
    do
    pin=$(cat /sys/class/gpio/gpio4/value)

    if [ $pin -eq 0];
    then
    script ausführen
    break
    fi
    sleep 1,5
    done


    Wie kann ich diese Zeilen so ergänzen, dass beim zweiten Tastedruck das Script beendet wird?

    Also, wenn ein zweites Mal die Bedienung

    if [$pin -eq 0] kommt, dass das Script gestoppt wird

    Einmal editiert, zuletzt von Cool_pi (28. Juli 2014 um 12:53)


  • Wie kann ich diese Zeilen so ergänzen, dass beim zweiten Tastedruck das Script beendet wird?


    So in etwa (ungetestet):


  • Mein Firefox reagiert nicht auf die Anweisung formatierten Code einfügen, deswegen schreibe ich direkt hier rein


    Dann musst du das per Hand eintragen:

    [ code ] blahbalhblah [ /code ]

    Ohne Leerzeichen natürlich....

    --
    man ist das System-Anzeigeprogramm für die Handbuchseiten von Linux.

  • Danke schon mal
    Kann das Script nicht testen,
    da ich diese Fehlermeldung bekomme

    Zeile 14: [: Fehlende `]'
    Zeile 21: [: Fehlende `]'
    Zeile 24: [: Fehlende `]'
    Zeile 28: [: Fehlende `]'

    Also in jeder Zeile, wo die if Bedienung vorkommt ist dann ein Fehler

    Einmal editiert, zuletzt von Cool_pi (28. Juli 2014 um 15:18)

  • Fehlt offenbar ein Leerzeichen vor ].

    Einmal editiert, zuletzt von habichthugo (28. Juli 2014 um 15:24)


  • Habe es getestet.

    Funktioniert nicht.
    Das Script startet ohne unabhängig vom Taster und wird weiter abgespielt, obwohl der Taster gedrückt wurde


    Sag mal, kriegst du auch was alleine hin? Vermutlich wird vom GPIO-Pin immer 0 gelesen. Wie hast du denn den Taster angeschlossen (xk Pullup gen 3.3V, Taster Pin gen Masse)? Mal manuel getestet, wie der Status bei ungedrücktem Taster ist (1) und ob der Pin beim Drücken überhaupt den Status wechselt (0)?

  • Angeschlossen ist alles richtig. Ein Pull-up zwischen Signal und 3,3 V. Der Taster ist zwischen Masse und Signal. Ein und Aus des Schalters ergibt

    Code
    pi@raspberrypi ~/projekt $ (cat /sys/class/gpio/gpio4/value)
    0
    pi@raspberrypi ~/projekt $ (cat /sys/class/gpio/gpio4/value)
    1
    pi@raspberrypi ~/projekt $ (cat /sys/class/gpio/gpio4/value)
    0
    pi@raspberrypi ~/projekt $ (cat /sys/class/gpio/gpio4/value)
    1
    pi@raspberrypi ~/projekt $ (cat /sys/class/gpio/gpio4/value)



    Mit dem Code aus dem ersten Post startet das Script ja mit dem Tastendruck

    Einmal editiert, zuletzt von Cool_pi (28. Juli 2014 um 16:28)

  • Das Script, welches mit Tastendruck ausgeführt werden soll, spielt nacheinander Videos, Bilder und Audiodateien mit omxplayer ab.

    Kann es ein Zeitproblem sein? Bekommt omxplayer Probleme bei so was?

    Ja, glaube das liegt am Skript, was ausgeführt werden soll.

    Wenn ich nur echo "Hallo" hinschreibe und nicht ganze Script durchführen lasse, dann funktioniert dieser Code. Beim Tastendruck kommt ein "Hallo". Beim erneuten Tastendruck wird das Script beendet die Console gibt

    Code
    pi@raspberrypi ~ $

    aus.

    Einmal editiert, zuletzt von Cool_pi (28. Juli 2014 um 18:29)

  • Es wäre denk ich wichtig in das Script die Initialisierung des GPIO Pins mit einzubauen, da das ansonsten nach einem Reboot gänzlich nicht mehr funktionieren würde.

    Wichtig wäre auch das andere Script zu kennen, was dieses macht usw

    Es sollte auch kein einfaches "kill" sein sondern ein "kill -9", da ansonsten gewartet wird bis das Script beendet wurde und es somit zu Überschneidungen kommen kann, mit -9 wird das aber erzwungen.

    Desweiteren sollte es einen Schutz bzw Prüfung geben ob das Script bereits ausgeführt wird um mehrfache Ausführungen zu unterbinden.

    Und zu guter letzt muss dieses Taster-Script natürlich auch in den Hintergrund geschickt werden (zB mit vorangestelltem nohup) oder besser noch in einem screen laufen, da es ansonsten beendet wird sobald die Console geschlossen wird.

    Evtl. wäre es aber auch sinnvoll das ganze in Python und mit Interrupt zu realisieren, das wäre Resourcenschonender (weniger CPU + RAM verbrauch)

  • Ersetze $$ (aktueller Prozess bzw. das laufende Script) durch $! (zuletzt abgespaltener Subprozess). Jetzt aber...
    Und ich würde kein kill -9 nehmen. Grade wenn's ein ernst zu nehmender Prozess ist sollte man ihm Gelegenheit geben, sich sauber zu beenden (SIGTERM). Eventuell sogar noch ein 'wait $pid' dahinter, der das Tastenscript blockiert, bis der Prozess weg ist...

  • Also, es sieht etwas besser aus.

    Das Script startet jetzt mit dem Tastendruck.
    Beim erneuten Tastendruck sehe ich zwar

    Code
    pi@raspberrypi ~/projekt $

    ,
    was ja eigentlich bedeute, dass der Prozess beendet wurde, jedoch laufen die Videos auf dem Monitor einfach weiter bis die ganze shleife durch ist.
    Mit kill -9 habe ich es auch probiert.


    Ersetze ich $$ duch $! kommt zwar das hier, aber videos werden einfach weiter abgespielt(also das Skript)

    Code
    Zeile 33:  3616 Beendet                 ps -C projekt.sh &>/dev/null || $projekt

    Einmal editiert, zuletzt von Cool_pi (30. Juli 2014 um 10:55)


  • Ersetze ich $$ duch $! kommt zwar das hier,


    Du musst auf jeden Fall $! (den mit & abgespalteten Subprozess) killen, nicht $$ (Prozessnummer des aktuellen Scripts, also 'unseres' Tasten-Abfrage-Scripts).
    Wie sieht denn das Script, das du leztlich ausführst (vor &), aus? Spaltet das noch mal einen Prozess ab? Am besten alles mal komplett hier rein (wenn zu groß mit pastebin).
    Probier das abwürgen deines Zielprozesses doch erst mal manuel...


  • Habe das Script als eine Textdatei angehängt


    Ja, schickt die eigentlichen Playerprozesse selbst noch mal in den Hintergrund. Normal sollten die bzw. die ganze Prozessgruppe sich dennoch beenden, wenn der Vaterprozess/Script gekillt wird...
    Probiere für das Beenden erst mal eine Lösung auf Shell/Konsolenebene zu finden. Das hat ja mit dem ursprünglichen Thema hier nicht mehr viel zu tun.

    Was passiert den bei
    # stimulator_player.sh ... &
    ...bisserl warten...
    # kill $!
    (in 'ner Konsole)?

    Einmal editiert, zuletzt von habichthugo (30. Juli 2014 um 12:44)

  • Habe in dem oberen Tasterskript
    nach state=3

    Code
    delay=0,5 
              kill $!

    eingebaut.

    Bringt erstmal nichts.

    Warum wird das Skript den weiter ausgeführt, wenn die Meldung ausgegeben wird, dass
    Prozess beendet wurde ( s.o) ?


  • Warum wird das Skript den weiter ausgeführt, wenn die Meldung ausgegeben wird, dass
    Prozess beendet wurde ( s.o) ?


    Du killst (nochmal) den Subprozess, nicht das Script selbst (da würde ich dann auch eher mit exit oder break raus gehen. Versuche erst mal gedanklich die verschiedenen Prozesse zu unterscheiden: Tastatur-Abfrage-Script, Start-Script für Player und den Player-Prozess selbst.
    Das Tastatur-Abfrage Script soll doch (später mal) dauerhaft laufen (beim Systemstart via init gestartet)? Das sollte jetzt erst mal so aussehen und funktionieren, wenn sich das Player-Start-Script sauber killen läßt:

    Einmal editiert, zuletzt von habichthugo (30. Juli 2014 um 14:27)


  • Ist das ratsam?


    Nein!

    Und - wie gesagt - wenn du das was da an der Stell 'Player-Start-Script&' gestartet wird nicht abgeschossen bekommst, dann brauchst du mit 'unserem' Script hier gar nicht weiter zu machen. Das funzt ansonsten nämlich.
    Also - noch mal - mach (in 'ner Konsole manuell) ein
    > Player-Start-Script&
    warte ein wenig und dann
    > kill $!
    Was passiert da?

    Einmal editiert, zuletzt von habichthugo (30. Juli 2014 um 14:26)

  • Wenn ich das Script, das ausgeführt werden soll, starte, dann sehe ich die Konsole nicht mehr.
    es werden Videos abgespielt.
    Muss dann Strg+C drücken, um zu beenden.

    danach kill $!
    zeigt mir

    Code
    bash: kill (3347)-Kein passender Prozess gefunden
    [1]+ Exit 127             myscript.sh


    Was sagt mir das?

    Code
    pi@raspberrypi ~ $ > myscript&
    [1] 2432
    pi@raspberrypi ~ $ kill $!
    -bash: kill: (2432) - Kein passender Prozess gefunden
    [1]+  Fertig                   > myscript

    Einmal editiert, zuletzt von Cool_pi (30. Juli 2014 um 15:13)

Jetzt mitmachen!

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