Hallo zusammen
Ich stehe etwas auf dem Schlauch und könnte die Hilfe eines Linux-Cracks / PHP Programmierers gebrauchen.
Ich möchte folgendes tun:
- Via IPSymcon eine PHP-Seite auf einem Raspberry pi aufrufen
- Der entsprechende PHP-script ruft seinerseits auf dem lokalen Raspberry pi einen Bash-script auf, welcher einen Stromzähler via USB-Infrarot-Dongle ausliest
- Der Output des Bash-scriptes wird dem PHP-script mitgeteilt und zurückgegeben
Was ich bereits gemacht habe:
- Der Bash-script funktioniert einwandfrei, wenn ich ihn auf dem Raspberry aufrufe
- Der PHP-script lässt sich problemlos aufrufen
Wo ich noch Probleme habe:
- Wenn ich den PHP-script aufrufe erhalte ich nicht den vollständigen Output des Bash-scriptes zurück
Output des Bash-scriptes bei lokalem Aufruf (auf dem Raspberry pi)
root@Stromzaehler:/home/pi# /bin/bash /home/pi/zaehler_auslesen1_web.sh
Initialisierung Sensor ... done
Auslesen Zaehler ...................... done
2017-07-19;07:45:54;175223;013533.539;008587.599;000000.000;000000.000;235;001.09;235;001.23;235;001.30;
PHP-script welcher auf dem Raspberry pi aufgerufen wird
<?php
$output = shell_exec('/bin/bash /home/pi/zaehler_auslesen1_web.sh');
echo "<pre>$output</pre>";
?>
Ob ich jetzt „system“, „exec“ oder eben „shell_exec“ verwenden macht keinen Unterschied im Verhalten, einzig die Formatierung der Darstellung ist etwas anders.
Im Browser sehe ich dann folgende Daten:
Initialisierung Sensor ... done
Auslesen Zaehler done
2017-07-19;07:47:54;;;;;;;;;;;;
Offensichtlich wird der Zähler gar nicht ausgelesen, da keine Daten zwischen den ; vorhanden sind. Zudem erhalte ich den Output im Browser nach ca. 2 Sekunden, während das Ausführen des Bash-scriptes ca. 20 Sekunden benötigt.
Hat jemand eine Idee, warum ich ein unterschiedliches Verhalten im Aufruf des Bash-scriptes (lokal oder via PHP-script habe) ?
Mein Ansatz waren die unterschiedlichen Benutzer, welche den Script aufrufen. Mit „root“ geht es verständlicherweise, aber auch mit dem „pi“ Benutzer. Mit „www-data“ kann ich es allerdings nicht testen, da der Befehl „su www-data“ ein „This account is currently not available.“ zurückliefert.
Besten Dank.
Gruss Letraz