PHP Script mit Python ausführen (Cronjob)

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Guten Tag,

    ich bin verzweifelt am suchen und komme nicht weiter...


    Mein Problem ist, das ich gerne einen sogenannten Cronjob mit Python erstellen will.

    Also auf meinem RPi läuft ein kleiner Webserver mit PHP und MySQL.

    Ich habe im Internet eine Bilderseite und arbeite gerade an einem Programm in PHP wo ich Bilder von meinem Arbeitscomputer über ein Eingabeformular auf den RPi übertragen kann (was auch funktioniert) dazu werden die Bildname und weitere Daten in der MySQL hinterlegt.

    Jetzt will ich das der RPi z.B. immer Nachts um 3 Uhr eine PHP Datei ausführt in der die Bilder verkleinert werden und auf den Webserver hoch geladen wird,
    das alles kann ich ohne Probleme in PHP programmieren.

    Aber wie sage ich dem Python Programm das es überprüfen soll ob eine Verbindung zu der Bilderseite besteht und wenn ja, dann sollen die Bilder hoch geladen werden und die MySQL Inhalte zu diesen Bildern in die Datenbank übertragen werden.


    Mir geht es nur um die Funktion um eine PHP Datei zu öffnen und eine Art der Rückgabe von PHP zu Pyhton ob der Upload erfolgreich war.

    Kann mir da bitte jemand weiterhelfen?????


    Mit freundlichem Gruß
    Phylus

  • Zitat von framp pid=11183 dateline=1366468574


    Z.b. mit

    Code
    os.system('php -f file.php')


    Siehe auch. Warum gehst Du aber den Umweg über Python wenn Du php kannst? Man kann python auch direkt aufrufen (Siehe auch) ?


    Okey danke =)

    Kann ich mit PHP auch einen Cronjob erstellen ohne das am RPi der Browser offen ist und jemand irgendwie was macht?

    Der RPi den ich dafür verwenden will ist feste verbaut und ich arbeite nebenbei an einem Programm mit Webinterface für eine Wohnungssteuerung.


    Also kann man das ganze auch ohne Python lösen, ohne das am RPi irgendwas durch einen User gemacht wird, also das der RPi das dann komplett automatisch macht????

  • Ja. Allerdings läuft Dein php natürlich nicht im Webserverkontext sondern als Standaloneprogramm. Z.B. habe ich eben mal ein winziges php Script geschrieben was ohne Probleme auf der Befehlszeile und naturelich dann auch im cron aufgerufen werden kann.

    PHP
    framp@obelix ~/t $ ./php.php 
    #!/usr/bin/php
    <?php
    
    
    print "Hello world\n";
    
    
    ?>
  • Zitat von framp pid=11186 dateline=1366469417


    Ja. Allerdings läuft Dein php natürlich nicht im Webserverkontext sondern als Standaloneprogramm. Z.B. habe ich eben mal ein winziges php Script geschrieben was ohne Probleme auf der Befehlszeile und naturelich dann auch im cron aufgerufen werden kann.

    PHP
    framp@obelix ~/t $ ./php.php 
    #!/usr/bin/php
    <?php
    
    
    print "Hello world\n";
    
    
    ?>

    Das verstehe ich gerade nicht so ganz richtig =/

    Gibts dazu eine Anleitung oder sowas?

  • Ein php Programm, was im Websererkontext läuft kann alle Moeglichkeiten, die ein Webserver bietet, benutzen (das ganze http Gedöhns). Wenn Du als Befehlszeilentool läufst hast Du darauf keinen Zugriff. Aber den brauchst Du wohl auch nicht, denn Du willst ja nur prüfen ob eine NW Verbindung existiert und danach Daten uploaden und was in der DB ändern.

  • Ok. Dann nimm doch mein kleines CodeSnippet, erstelle eine Datei, die z.B. updatePics.php heisst und mache sie mit

    Code
    chmod +x updatePics.php


    ausführbar. Dann rufst Du es auf der Befehlszeile mit

    Code
    ./updatePics.php


    auf und solltest Hello World sehen.

    Dann baust Du das Script so aus dass es alles das tut was Du möchtest. Danach kopiertst Du es in /usr/local/bin und rufst es aus cron regelmäßig auf. Im Tutorial des Forums gibt es ein Tut zu cron was Die dabei helfen wird ;)

  • Sorry. Ich habe es nicht auf der raspxbmc ausprobiert sondern auf meinem Linuxlabtop:blush:. Jetzt aber schon ... und wie ich festgestellt habe fehlt dort das php cli.

    Code
    sudo apt-get install php5-cli


    sollte zum Erfolg führen :shy:

  • Danke, aber das hab ich schon installiert ;)

    Ich kenne mich mit Linux so gut wie gar nicht aus, hab mal nen Webserver aufgespielt und bissel mit den GPIOs rumgespielt,

    Ich hab per FTP hier meine Cronjob dateien liegen /cronjob/datei.php

    Wie ist der Pfad zu dieser Datei, die ich angeben muss?
    bzw. wo finde ich diese?

    Ich finde das mit dem Crontab bissel blöd und verstehe das leider auch noch nicht so ganz...

    Einmal editiert, zuletzt von PhylusDAble (20. April 2013 um 18:58)

  • Zitat von PhylusDAble pid=11197 dateline=1366476831


    Danke, aber das hab ich schon installiert ;)


    Sehr gut.

    Zitat


    ...Ich kenne mich mit Linux so gut wie gar nicht aus,


    Auch ich habe mal mit Linux angefangen ..:)

    Zitat


    ...Ich hab per FTP hier meine Cronjob dateien liegen /cronjob/datei.php

    Wie ist der Pfad zu dieser Datei, die ich angeben muss?
    bzw. wo finde ich diese?


    Du kannst also /cronjob/datei.php in der Befehlszeile ausfuehren und es macht alles was Du moechtest - check, upload und db? Dann muss es nur noch in die crontab.

    Zitat


    Ich finde das mit dem Crontab bissel blöd und verstehe das leider auch noch nicht so ganz...


    Hast Du Dir das Tut angesehen? Es ist leichter und schneller geantwortet wenn Du gezielte Fragen stellst.

  • Also ich kann auf die Datei über den Webbrowser zugreifen 127.0.0.1/cronjob/cronjob.php

    Aber egal was ich mache, ich finde den Pfad nicht zu dem oben genannten Ordner in dem die Cronjobs hinterlegt sind.

    das mim eintragen ist ja nur das

    Code
    * * * * * <absoluter Pfad der Datei>/cronjob.php

    wobei die * ersetzt werden bzw nur die die es sein sollen.


    Kann ich auch einen Cronjob erstellen der jede Minute abfragt ob in der MySQL etwas zutrifft und wenn ja, dann führt es das aus auch wenn es länger als 1 min geht?
    Oder gibt es da Konflikte?

  • Zitat von PhylusDAble pid=11199 dateline=1366478336


    Also ich kann auf die Datei über den Webbrowser zugreifen 127.0.0.1/cronjob/cronjob.php

    Aber egal was ich mache, ich finde den Pfad nicht zu dem oben genannten Ordner in dem die Cronjobs hinterlegt sind.


    Der steht unter Deinem ContextRoot von apache. Sofern Du nix umkonfiguriert hast ist das /var/www.

    Tip zum Suchen bei Linux:

    Code
    find / -name dieZuSuchendeDatei
    Zitat


    Kann ich auch einen Cronjob erstellen der jede Minute abfragt ob in der MySQL etwas zutrifft und wenn ja, dann führt es das aus auch wenn es länger als 1 min geht?
    Oder gibt es da Konflikte?


    Da bin ich überfragt. Ich vermute nicht, denn dazu müsstest Du eine ständig laufende Application haben die von sql notified wird - sofer ein register bei mysql überhaupt geht.

  • Okey, jetzt, wenn ich bein Crontab alle 5 Werte als * mache, dann heißt das doch das es jede Minute etwas eingibt oder?

    Zitat von PhylusDAble pid=11204 dateline=1366480308


    Okey, jetzt, wenn ich bein Crontab alle 5 Werte als * mache, dann heißt das doch das es jede Minute etwas eingibt oder?

    Okey nein das muss bei Minute so sein */1

    aber er trägt nichts in meiner DB ein, habe die Datei so ausgeführt und er trägt was ein, aber nichts von alleine

    Einmal editiert, zuletzt von PhylusDAble (20. April 2013 um 19:56)

  • Hallo PhylusDAble,

    Zitat

    Okey nein das muss bei Minute so sein */1

    Ob du jetzt "*" oder "*/1" schreibst ist vollkommen egal. Beide Schreibweisen haben den gleichen Effekt. Erst wenn du einen anderen Divisor verwendest gibt es einen Unterschied.

    Zitat

    * * * * * <absoluter Pfad der Datei>/cronjob.php

    Schonmal daran gedacht, dass man hier auch den Interpreter angeben muss und nicht nur die PHP-Datei?

    Gruß Georg

  • Auf meinem Raspbian sieht die Crontab wie folgt aus:

    Hast Du den gesamten Inhalt der /etc/crontab gepostet?

  • Wenn ich das wissen würde, dann hätte ich das ja nicht gefragt..

    Und wie sage ich das er den PHP Interpreter verwenden soll?

    Zitat von PhylusDAble pid=11214 dateline=1366483455


    Wenn ich das wissen würde, dann hätte ich das ja nicht gefragt..

    Und wie sage ich das er den PHP Interpreter verwenden soll?

    * * * * * /usr/bin/php /var/www/cronjob/bilder/bild_upload.php

    oder ist das auch falsch?
    denn es geht noch immer nicht.

    Einmal editiert, zuletzt von PhylusDAble (20. April 2013 um 20:56)

Jetzt mitmachen!

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