Start eines Python-Scripts mit php funktioniert nicht

  • Ich habe eine rrd-Datenbank erstellt für meine Solardaten, die ich mittels Python befülle.
    Das Erstellen der Grafiken funktioniert mit diesem Python-Script "Grafiken_erzeugen2.py" auch, wenn ich es direkt im Terminal starte.
    Das Scrpt liegt unter /home/pi.

    Nun sollte das Script mittels php beim Aufruf der Seite ausgeführt werden.
    Dazu habe ich die /etc/sudoers ergänzt durch
    www-data ALL=NOPASSWD:/home/pi/ Grafiken_erzeugen2.py
    Dann habe ich den User gpio der Gruppe www-data hinzu gefügt.
    (nach Anleitung aus: https://pi-buch.info/gpio-steuerung-in-php-scripts/)
    Hier mein php-Script "index_seite2.php"

    Die Seite funktioniert, d.h. die Grafiken werden angezeigt, aber leider nicht neu erstellt.
    Ich finde auch keine Fehler in den Logdateien /var/log/auth.log oder /var/ligttpd/error.log

    Habe mit Berechtigungen und Gruppenzuweisungen herum probiert, aber keine Lösung gefunden.

    Der nächste Versuch war, das Python-Script "Grafiken_erzeugen2.py" über die cron zu starten.
    Habe dazu die crontab um folgende Zeile ergänzt
    */5 * * * * root python /home/pi/Grafiken_erzeugen2.py 2>&1 >> /home/pi/grafiken.log

    Die grafiken.log zeigt mir auch, dass alle 5 Minuten das Scrpt gestartet wird.
    Leider werden aber die png-Grafiken des rrdtools nicht erstellt.


    Kann jemand helfen?

  • Start eines Python-Scripts mit php funktioniert nicht? Schau mal ob du hier fündig wirst!

    • Offizieller Beitrag

    Hallo Tombir,

    könnte das am Browsercache liegen?

    Code
    <meta http-equiv="cache-control" content="max-age=0" />
    <meta http-equiv="cache-control" content="no-cache" />
    <meta http-equiv="expires" content="0" />
    <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
    <meta http-equiv="pragma" content="no-cache" />


    ...in den HTML-Header.

    Vom Sinn oder der Sicherheit, wenn man den User www-data zu den sudoers hinzuzufügt, will ich garnicht erst anfangen. :s

  • hyle
    deine Antwort zum Browsercache verstehe ich nicht
    wie kann der Cache das Erstellen von png-Dateien verhindern?
    soll ich deine Zeilen in mein php-Script einfügen? was bewirken diese?

    Manul
    Danke für den Tipp, werde ich umsetzen - komme aber die nächsten 2 Stunden nicht dazu (Weihnachtsstress ;)
    melde mich danach
    Automatisch zusammengefügt:

    Danke für den Tipp
    da ich Anfänger bin, muss ich mir das mal in Ruhe durchlesen, da ich auf den 1. Blick den Unterschied zu meiner Vorgehensweise noch nicht verstanden habe

    Einmal editiert, zuletzt von Tombir (24. Dezember 2016 um 13:50)

    • Offizieller Beitrag


    Die Seite funktioniert, d.h. die Grafiken werden angezeigt, aber leider nicht neu erstellt.


    Habe ich so verstanden, daß nach dem aktualisieren durch Metarefresh die Grafiken im Browser die selben sind wie vorher.

    Meine Frage war: könnte das am Browsercache liegen?
    - Also werden die Grafiken tatsächlich nicht neu erstellt?
    - Oder werden die neu erstellt, aber du bekommst nur die Grafiken aus dem Browsercache angezeigt und nicht die Neuen?

    Die Zeilen kommen in deine PHP-Datei unter <META HTTP-EQUIV="refresh" CONTENT="60">
    und bewirken das u.a. der Browser den Inhalt der Seite nicht zwischenspeichern soll.

  • Übrigens: Es gibt kein Grund wieso dein Script überhaupt über sudo ausgeführt werden müsste! Auch dass www-data in der Gruppe "gpio" sein müsste ist für Dein Script nicht erforderlich.

    Auch der von Dir vorgenommene Crontabeintrag ist fehlerhaft sofern du "crontab -e" verwendet hast. Der von dir gezeigte Eintrag ist nur für die Systemcrontab /etc/crontab korrekt, allerdings benötigt Dein Script keine root-Rechte
    FAQ => Nützliche Links / Linksammlung => crontab

    Da Du das Python Script über root ausführst (mithilfe /etc/crontab oder sudo's) wird der Webserver-Benutzer 'www-data' eventuell keine Rechte haben die erzeugte Datei zu lesen... Also evtl. liegt da der Hund begraben. Dein Script benötigt aber wie gesagt keine root-Rechte via sudo - man muss nicht alles über sudo abwickeln.


    Da das Python Script in einem anderen Benutzerverzeichnis liegt, hat der www-data Benutzer kein Zugriff darauf - deshalb hast du es vermutlich über sudo ausführen wollen da root generell alles darf. Leg das Script am besten in ein Verzeichnis wo www-data ohne sudo Zugriff drauf hat


    PS: Die von Dir verwendete Anleitung ist leider auch fehlerhaft

  • Ich habe mich mal von den Vorbereitungen zum Weihnachtsessen abgesetzt, da mir insbesondere der Vorschlag von Manul sehr einleuchtend war.

    Habe den absoluten Pfad eingetragen - und es funktioniert!!!!!!!!
    Und zwar sowohl php als auch crontab!

    Danke Manul für deine Hilfe!

    Wahrscheinlich hat auch hyle Recht, da sich die neuen Grafiken erst zeigen, wenn ich die Seite aktualisere.
    Werde seine Vorschläge noch berücksichtigen, komme jetzt aber nicht dazu.

    meigrafd: Werde die Rechte Zug um Zug zurück nehmen und sehen, ob es dann noch funktioniert.

    Wird aber bestimmt erst morgen eine Rückmeldung geben - jetzt ist erst mal wieder das Weihnachtsessen angesagt.

  • Den Cron-Eintrag habe ich wieder entfernt, da ich ihn nun nicht mehr benötige.
    Den Vorschlag von meigrafd mit /var/sudowebscript.sh finde ich aus Sicherheitsaspekten sinnvoll.
    Da ich mich mit der shell-Programmierung nicht so gut auskenne, muss ich das noch einmal genauer anschauen, damit ich das um setzen kann.

    Hier jetzt die aktuellen Scripte, die funktionieren:
    /home/pi/Grafiken_erzeugen2.py

    und hier die Seite für den Aufbau der Grafiken dazu:
    /var/www/Grafikseiten/index_Seite2.php

    und hier als Beispiel die Grafiken dazu:





    Einmal editiert, zuletzt von Tombir (30. Dezember 2016 um 18:04)

Jetzt mitmachen!

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