Raspistill Prozess beenden

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,
    ich starte per PHP ein Shell Script, indem ich folgendes ausführen lass.

    #!/bin/bash
    while [ 1 ]; do
    DATUM=`date +%d%m%Y-%H%M%S`
    raspistill -w 2592 -h 1944 -q 100 -t 5000 -vs -o /home/pi/image_$DATUM.jpg
    sleep 30s
    done
    exit 0

    Sawas wie eine Serienaufnahme von Bildern, alle 30 Sekunden.

    Mit "sudo killall -e raspistill" kann ich den Prozess immer dann beenden wenn er ausgeführt wird.

    Diesen Vorgang würde ich gerne automatisieren. Prüfen ob der Prozess aktiv ist und ihn dann beenden.

    Ich habe keine Ahnung wie ich das anstellen kann. WHILE DO Schleife?

    Vielen Dank.
    Grabbbo

  • Wenn er nicht ausgeführt wird, kannst du doch trotzdem versuchen ihn zu killen und die Fehlermeldung von killall ignorieren.

    Sonst fallen mir auf die Schnelle zwei Ansätze ein:
    * ps aux | grep raspistill auswerten
    * beim Start von raspistill ein temporäres File erzeugen und den killall dann davon abhängig machen ob das File existiert

  • Guten Morgen,
    Problem erkannt aber nicht gelöst.
    Ich kann per:

    #!/bin/bash
    while ( ps aux | grep 'raspistill' | grep -v 'grep' );
    do
    sudo killall -I raspistill
    done
    exit 0

    "raspistill" beenden. Dann wird aber "sleep 30s" ausgeführt und danach wieder raspistill. Andersrum genau so.

    Wer kann mir weiterhelfen? Einen Reboot möchte ich ungerne machen.

    • Offizieller Beitrag

    Vielleicht erklärst du erstmal was du da eigentlich tun willst. Du machst aller 30 sek. ein Bild mit raspistill, gut. Warum willst du jetzt den Prozess killen? raspistill ist ein Programm was sich nach erfolgreicher Ausführung auch beendet, es ist ja kein daemon der einfach weiterläuft.

  • @ dbv
    Also ich starte das Script (Endlosschleife) per Handy. Webserver aufrufen, Startbutton drücken, Aufnahme beginnt.

    #!/bin/bash
    while [ 1 ];
    do
    DATUM=`date +%d%m%Y-%H%M%S`
    raspistill -w 2592 -h 1944 -q 100 -t 5000 -vs -o /home/pi/image_$DATUM.jpg
    sleep 30s
    done

    exit 0

    Pi macht ein Bild, wartet 30 Sekunden, beginnt die Schleife von vorn, Macht ein Bild, wartet...

    Das lasse ich z.B. 2 Tage laufen. Jetzt würde ich das ganze gerne beenden. Webserver aufrufen, Stopbutton drücken, Aufnahme stoppt.

  • Es gäbe 2 Möglichkeiten:

    1)
    die PID des Scripts in eine Datei schreiben die dann vom PHP Script überprüft, ausgelesen, der Prozess beendet und die Pid-Datei gelöscht wird.. Den "kill Script" Button könnte man dann nur anzeigen lassen wenn das pidfile existiert
    Also zB:
    Im bash Script:


    Im PHP Script:

    Im PHP Script:

  • Es gäbe noch eine Lösung, die rechtemäßig vielleicht einfacher wäre: der Webserver erzeugt beim Drücken des Kill-Buttons eine leere Datei mit vereinbartem Namen, z. B. "stop_recording.txt". Dein Skript prüft in jedem Durchlauf vor Aufruf von raspistill, ob die Datei existiert. In diesem Fall löscht es die Datei und beendet sich selbst.

Jetzt mitmachen!

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