PHP-Datei als Cronjob ausführen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP-Datei als Cronjob ausführen

    Hallo zusammen.

    Ich möchte ein PHP-Skript als Cronjob ausführen lassen, aber es funktioniert leider nicht.
    Nach langem Testen und Grübeln habe ich die Fehlerquelle endlich lokalisieren können:

    Im PHP-Script, welches als Cronjob laufen soll, wird eine weitere Datei mit include eingebunden.
    Sobald ich diesen Teil entferne funx alles prima.

    Da das aber in diesem Fall zu komplex ist, um alles in eine Datei zu schreiben und das Problem nur auf einem Server auftritt, kann es meiner Meinung nach nur an einer Server-Einstellung liegen.

    Nur an welcher?

    Wie gesagt, das Skript ist korrekt eingebunden und funktioniert 1:1 auf meinem eigenem Server, halt nur nicht auf dem des Kunden...
    Habe auch schon absolute und relative Pfade probiert, aber nix geht.

  • #2
    Bau mal getcwd(); vor der Include-Anweisung ein, lass es damit nochmal auf deinem Rechner und dem Server laufen und falls das nicht zur Erleuchtung führt, gib uns wenigstens die genaue Fehlermeldung.

    Kommentar


    • #3
      Original geschrieben von onemorenerd
      Bau mal getcwd(); vor der Include-Anweisung ein, lass es damit nochmal auf deinem Rechner und dem Server laufen und falls das nicht zur Erleuchtung führt, gib uns wenigstens die genaue Fehlermeldung.
      Das dürfte die Lösung sein, aber ich glaube nicht, dass ers verstanden hat, worans liegt.
      Dadurch, dass der CronJob die Datei von einem anderen Verzeichnis aus aufruft, stimmen die ganzen relativen Include-Paths nicht mehr.
      d.h. wenn:

      PHP-Code:
      include 'test.php'
      auf /srv/www/htdocs/testordner/ bezogen war, versucht PHP die Datei von /var/spool/cron [nur Beispiel] zu laden, da dort gerade der aktuelle Ausführungspfad gesetzt wird.
      Das ist der Nachteil von relativen Pfadangaben, die Lösung mit
      PHP-Code:
      include getcwd().'test.php'
      sollte das aber beheben.

      Übrigens, den Cronjob nie direkt in der Datei bearbeiten sondern am besten immer über Konfigurationstools oder Kommandozeile

      Ich bin mir nicht sicher, obs jetzt verstanden wurde, aber ein Versuch ist es immer mal wert
      ----
      http://main.source4u.de - Webdesign und Software

      Kommentar


      • #4
        ...und das kommt noch hinzu:
        Selbst in den Serverlogs ist keine Fehlermeldung zu sehen.

        Man kann das Script auch direkt im Browser aufrufen und es funktioniert fehlerfrei, nur halt nicht als Cronjob.

        Die Pfadangaben sind mit Sicherheit richtig. Auch wenn ich den kompletten Pfad mit getcwd() auslese und einbind komme ich zu keiner Lösung....sehr seltsam dieses

        Kommentar


        • #5
          Kein Wunder, ich wollte dich getcwd() nur mal einbauen lassen, damit du siehst, wo das Script jeweils läuft.

          include getcwd().'test.php';

          bringt gar nichts, es ist das gleiche wie

          include 'test.php';

          denn bei letzterem sucht PHP die test.php sowieso im aktuellen Verzeichnis. (include_path jetzt mal außen vorgelassen)

          Die einfachste Lösung wäre, alle Pfade absolut anzugeben, also beispielsweise so:

          include '/srv/www/htdocs/testordner/test.php';

          Kommentar


          • #6
            Hallo zusammen,
            nee, habe das mit dem getcwd() schon richtig verstanden. Ohne da jetzt ins Detail gehen zu wollen aber es wird ein Cronjob zur Generierung von PDFs mit FPDF + FPDI gestartet. Deswegen wird dort die FPDF - Klasse eingebunden, die aber gleichzeitig auch wieder selbst weitere Dateien per include / require einliest.
            Und das ganze liegt dann auch noch in verschiedenen Ordnern...

            Problem konnte aber anders gelöst werden, und für alle die vielleicht vor ähnlichen Problemen stehen, hier die Lösung:

            Beim Aufruf in der Crontab einfach vorher mit cd in das richtige Verzeichnis wechseln und die eigentlich Cronjob-PHP-Datei "anheften":

            Funktioniert:
            PHP-Code:
            0 15 * * *  cd /home/httpd/vhosts/mein-server.de/httpdocs/mein-ordner/ && ./cronjob.php 
            Funktionierte auf diesem Server nicht:
            PHP-Code:
            0 15 * * *  /home/httpd/vhosts/mein-server.de/httpdocs/mein-ordner/cronjob.php 

            Aber DANKE fürs Grübeln

            Kommentar

            Lädt...
            X