ubuntuusers.de

script beenden

Status: Gelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

ewuthrt

Anmeldungsdatum:
31. Juli 2014

Beiträge: 71

Hallo,

ich hoffe die Frage ist hier nicht falsch.

Habe folgendes Problem

Versuche mit einem Tastendruck ein Script starten und mit dem erneuten Tastendruck es zu beenden.

Starten funktioniert, doch das Beenden klappt nicht so richtig.

Habe es mit (sudo) kill $pid (sudo) pkill -9 omxplayer exit 0

sudo kill $pid || exit probiert. Der Prozess wird zwar beendet, doch mein omxplayer hört nicht auf hört nicht auf Dateien abzuspielen.

Was kann man denn da noch tun?

Im Script geht es darum, Video- und Audiodateien mit omxplayer abzuspielen.

Moderiert von Developer92:

Versionsangabe entfernt, da es sich hier um Raspbian und nicht um Ubuntu handelt. Beachte dies in Zukunft beim Erstellen eines Threads!

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Hi ewuthrt,

erstmal herzlich willkommen hier auf dem Forum !

Normalerweise müsste das ja gehen, den Player über seine PID abzuschießen. Du solltest es zuerst mal per Hand probieren, indem Du mit ps die PID ermittelst, und die dann (in einem 2. Terminal) mit kill beschießt. (Die exits sind Quatsch, die kannst Du weglassen !)

Womöglich startet der Player auch noch einen 2. Prozess ? - dem müsstest Du mal mit ps -H nachgehen.
(Ich nehme mal an, Deine Angabe "Edubuntu 10.04" ist Quatsch, ich dachte, den omxplayer gibt's nur für Raspberry Pi ?!)

LG,

track

ewuthrt

(Themenstarter)

Anmeldungsdatum:
31. Juli 2014

Beiträge: 71

Auf einmal sehe ich das da

PID TTY TIME CMD

Wie werde ich das wieder los? Warum startet mein Skript nicht mehr?

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Du müsstest schon etwas mehr verraten .... 😬

Was für ein Gerät benutzt Du, was für ein Terminal (oder wo hast Du den Befehl gestartet ?) und welchen Befehl hast Du dort genau eingegeben ?
Ansonsten sieht das aus wie die ganz normale Überschriftzeile von ps ...

track

ewuthrt

(Themenstarter)

Anmeldungsdatum:
31. Juli 2014

Beiträge: 71

Habe ein RaspberryPi mit Rasbian. Habe im LX Terminal den Befehl sudo ./myscript.sh angegeben

mit ps sehe ich das da PID TTY TIME CMD 8469 pts/1 00:00:01 bash 9032 pts/1 00:00:00 ps

kill 9032 8469 bringt auch nichts

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

ewuthrt schrieb:

Habe ein RaspberryPi mit Rasbian.

Ok, ich habe nur normales Linux,kann es also nicht selber testen. Versuchen wir mal einen "Blindflug" ...

Habe im LX Terminal den Befehl sudo ./myscript.sh angegeben

Ok, hat das Ding ein 2. Terminal, so dass Du dort Befehle eingeben kannst ?

mit ps sehe ich das da ...

Versuch es bitte mal mit ps -H ... und bitte: schreib die Ausgabe in einen {{{Codeblock}}} - sonst kann man ja gar nichts lesen !

kill 9032 8469 bringt auch nichts

Nee, Du willst ja auch gar nicht Deine bash killen !

Lass uns zuerst mal gucken, welche Prozesse genau aufgerufen werden. Dann können wir gezielt "killen" ...

track

p.s.: ich bin jetzt bis heute Abend weg, dann mache ich weiter.

ewuthrt

(Themenstarter)

Anmeldungsdatum:
31. Juli 2014

Beiträge: 71

Ich kann ein zweites Terminal öffnen. Habe den RasbPi neu gestartet. Die Prozesse laufen trotzdem. Wieso denn?

1
ps -H 

zeigt mir

1
2
2411 pts/0    00:00:01 bash
2535 pts/0    00:00:00   ps

ewuthrt

(Themenstarter)

Anmeldungsdatum:
31. Juli 2014

Beiträge: 71

Ok,

andere Skripts funktionieren. Hier ist mein Skript für einen Tatser. Wenn ich es so lasse, funktioniert es. Wenn ich aber statt echo "1" ein Sktipt (myscript) ausführen möchte, dann kommt PID TTY TIME CMD.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
state=0
while true; do
  pin=$(cat /sys/class/gpio/gpio4/value)
  if [ $pin -eq 0 -a $state -eq 0 ]; then
    state=1
   echo "1"
   
   #myscript
   #pid=$!
  fi
  if [ $pin -eq 1 -a $state -eq 1 ]; then
    state=2
  fi
  if [ $pin -eq 0 -a $state -eq 2 ]; then
    state=3
   #kill $pid
   echo "0"
  fi
  if [ $pin -eq 1 -a $state -eq 3 ]; then
    state=0
  fi
  sleep 1
done

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Ok, als Grundstruktur sehe ich ein Skript, das einen gpio abfragt, und dann einen von 4 Zuständen annimmt, jede Sekunde wieder.
Das sollte für sich eigentlich auch funktionieren. (evt. solltest Du zum testen etwas ausführlichere Ausgaben einbauen ! - insbesondere 1x vor und 1x nach Start des Players.)

Was macht jetzt Dein myscript.sh genau ?
- wenn das nämlich Deinen Player zwar startet, aber danach nicht wieder zurückkehrt, dann bleibt Deine while - Schleife an dieser Stelle stecken !
(Der Rest der Schleife wird dann nie erreicht. Übrigens: warum startest Du den Player nicht direkt, sondern mit einem 2. Skript ?)

LG,

track

ewuthrt

(Themenstarter)

Anmeldungsdatum:
31. Juli 2014

Beiträge: 71

Also im ersten Post habe ich ja geschrieben, was das Skript macht. Vier Zustaände: Vor dem drücken, drücken, nach dem drücken, noch mal drücken.

Myscript ist ein Skript, das Videos und Audiodateien mit Omxplayer nacheinander in einer festen Reihenfolge abspielt. Wie gesagt ich möchte, dass mit dem Tastendruck das Skript Myscript beendet wird. Offensichtlich reicht die Anweisung

1
kill $pid 

nicht, um das Myscript zu beenden.

Der Omxplayer bleibt entweder hängen oder es werden mehrere Dateien gleichzeitig abgespielt oder sonst noch was.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

ewuthrt schrieb:

Der Omxplayer bleibt entweder hängen oder es werden mehrere Dateien gleichzeitig abgespielt oder sonst noch was.

Ja, genau, darum geht es ... 😉

Also probier es doch als 1. Schritt mal damit, dass Du im Deinen Zeilen 6-8 sowas schreibst:

    echo "1 vorher"
    myscript
    echo "1 nachher"

Dann siehst Du, ob das Player-Skript überhaupt freiwillig zurückkehrt, bevor der Player beendet wird !
Klar, dass dann nichts weiter geht !

Dann müsstest Du nämlich das Skript in den Hintergrund schieben und seine PID ermitteln, z.B. so:

    echo "1 vorher"
    myscript & 
    echo "1 nachher mit PID $!"

Vielleicht kommst Du so weiter ? - allerdings musst Du dann aufpassen, dass Du das Playerskript nicht 100 Mal startest ...

LG,

track

holgiB

Anmeldungsdatum:
11. November 2008

Beiträge: 528

Moin,

warum machst du dir die Mühe den omxplayer auf dem Raspi über seine PID zu stoppen ? Ein einfaches "killall -9 omxplayer" führt hier doch auch zum Erfolg. Und mehr als einen gleichzeitig laufenden OMXPlayer hat man auf dem Raspi ja eher net. 🤣

LG, Holgi

ewuthrt

(Themenstarter)

Anmeldungsdatum:
31. Juli 2014

Beiträge: 71

Ja es sieht aus, dass es gar nicht so einfach ist. Nichts mit

1
kill

funktioniert.

Es läuft auch nur ein Omxplayer. Er spielt nur nacheinander Dateien ab. Sage ich dem

1
kill 

kommt es zum Problem und Omxplayer

Hier ist ein Ausschnitt aus dem Skript "My Skript"

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#Abspielen und Laden der Dateien
while (( ++n <= $i ))
 do
  #Spiele Videos ab:
  if [ "${name[n]}" == "video" ]
   then
    omxplayer -b ${ordner[n]} < /tmp/cmd"$n" &
    echo -n p > /tmp/cmd"$n" & 
    sleep $delay
    echo -n p > /tmp/cmd"$n" &
    $timestamp >> $output 
    sleep ${dauer[n]}
    echo -n q > /tmp/cmd"$n" &
    $timestamp >> $output 

Das Gleiche schreibe ich noch mal für Audio und Bilder.

Vielleicht sollte man hier auch eine Bedienung einbauen? So was wie

1
if [state =2]; then pkill omxplayer oder spiele keine Audio und Bilder ab

?

Kelhim

Avatar von Kelhim

Anmeldungsdatum:
18. September 2006

Beiträge: 3642

Wohnort: Köln

An welcher Stelle in deinem Skript versuchst du denn mit welchem Befehl, den Player zu beenden?

In deinem Skriptausschnitt sehe ich nur, wie du ihn startest, nicht wie du ihn beenden willst. Vielleicht kannst du diese Zeile plus ein bisschen Kontext zeigen?

ewuthrt

(Themenstarter)

Anmeldungsdatum:
31. Juli 2014

Beiträge: 71

Kelhim schrieb:

An welcher Stelle in deinem Skript versuchst du denn mit welchem Befehl, den Player zu beenden?

In deinem Skriptausschnitt sehe ich nur, wie du ihn startest, nicht wie du ihn beenden willst. Vielleicht kannst du diese Zeile plus ein bisschen Kontext zeigen?

Also. In diesem Skript geht es nur darum, den Omxplayer zu starten, um Dateien abzuspielen, wenn Bedienungen erfüllt sind ( Datei vorhanden, Dateiformat ist richtig), bezeichnet als Myscript.

Das andere Skript, bezeichnet als Tasterskipt geht es darum, das Mycript mit einem Tastendruck zu starten und mit einem erneuten Tastendruck zu beenden.

Deswegen gibt es im Myscript auch keine Bedienung zum Beenden des Scriptes, weil es ja durch einen anderen Skript(Tastenskript) beendet werden soll.

P.S warum wurde dieses Thema gemeldet?

Antworten |