Moin,
ich versuche ein Python Script, das eine kamera auslößt, das Bild herunterlädt und auf der Kamera löscht, über den Webbrowser des Pi's zu starten. Wenn ich das Script ganz normal über
, lädt er die Bilder nicht herunter und nach 5 Bildern ist die Kamera Busy. Das alles funktioniert einwandfrei wenn ich es nicht über das php Script mache. Ich muss es aber über den Browser starten.
Was könnte das Problem sein?
MFG
Niemand muß etwas über PHP-Skripte machen. Ich habe z.B. seit über 10 Jahren kein PHP mehr ernsthaft verwendet. Warum muß das Programm über sudo gestartet werden? Stimmen die Verzeichnisse? Welche Fehlermeldungen gibt es?
Verzeichnisse passen. Fehlermeldungen gibts keine. Wenn ich die php Datei mit php in der Konsole ausführe, funktioniert es. Nur nicht über den Browser. In der php Datei ist auch ein Header angeben zur index.php. Das klappt aucht. Nur nicht der system Befehl.
Nochmal die Frage: Warum muß das Programm über sudo gestartet werden?
Der Webserver läuft ja hoffentlich nicht als Nutzer, der sudo ausführen darf. Und da gibt es natürlich eine Fehlermeldung, man muß sie nur ausgeben.
Ich habe mit jetzt mit ini_set('error_reporting'. E_ALL); die Fehlermeldungen anzeigen lassen. Keine da.
Wenn ich das script mit php script.php ausgühre, alles wurderbar. Wenn ich es über den Browser aufrufe localhost/script.php (das script liegt im richtigen Ordner dafür), passiert nix, außer das ich auf einer weißen Seite lande.
Ich lasse in dem Php Script auch eine Datei schreiben. Das klappt auch einwandfrei.
Die Eingabe sieht wie folgt aus:
www-data@raspberrypi:~/html$ sudo python script.py
Ja dann klappt es. Habe es auch mit einem 2. anderen Script probiert klappt auch.
Gibt es auch eine andere Möglichketi? Ich habe nämlich noch ein paar andere Seiten auf dem Server auf denen man die Parameter eingibt usw. und ich würde das jetzt ungern alles nochmal abändern, es sei denn es gibt keine andere Methode.
Prinzipiell muss das gehen über PHP. Warum das jetzt nicht klappt kann ich so auch nicht sagen - ich bin nicht auf dem laufenden, was zB der Apache für Limitierungen an seine Prozesse anlegt. Und da muss es ja irgendwie dran liegen. Ich würde da nochmal tiefer in die Logs starren.
Das ganz generell ist dein Ansatz, per System zu arbeiten ziemlicher Mist. Denn damit bist du IMMER darauf angewiesen, dass der Browser rechtzeitig was macht. Wenn der Benutzer den Browser schließt, und dein Skript gerade die Turbine auf Vollgas gedreht hat, dann bleibt das so lange so, bis es kracht.
Darum ist es eh besser, das Skript dauerhaft laufen zu lassen, und damit zu kommunizieren. ZB per socket. Oder eben sogar HTTP. Es läuft also endlos, und bekommt per HTTP Befehle, was es tun soll. Ob die direkt aus dem Browser kommen, oder zb via PHP und CURL ist egal.
Aber so kannst du dann zb Timeouts ablaufen lassen, und die Turbine wieder abschalten. Oder auch nur die Plumpsklobeleuchtung. Eigentlich kommt fast nichts ohne Timer aus.
Ist es wirklich sinnvoll bzw. notwendig städig zu kommunizieren? Der Webserver soll nur die Daten in eine Datei speichern (klappt) und dann das script starten wenn ich den Knopf drück. Dann soll nur noch eine Seite mit script läuft angezigt werden was ich mit einer php abfrage in der index mache, indem ich eine Datei lese in der entweder running oder nix steht. Dann hat sich alles gegessen. Der Raspberry pi steht für ein paar Stunden irgendwo rum und macht eine Timelapse mit dem script. Fertig. "Mehr" solls nicht werden.