PHP und CronJob

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

  • PHP und CronJob

    Hallo,

    ich habe ein Problem:

    Ich lasse per Cronjob jede Stunde ein PHP-Script starten. Dieses Script als ein einziges, braucht aber mehr als 1 Minute zum laden. Nicht gut, da bei meinem Hoster max_execution_time = 30 und der Safe_Mode = on ist, da ich ja sonst temporär die max_execution_time verlängern könnte. Sprich das Script bricht in der Mitte ab...

    Ich habe also das eine Script in 12 Teile zerlegt und habe folgende Methoden versucht:

    1: Am Ende jedes Scriptes per header(location:bla); weitergeleitet
    2: Per META refresh am Ende weitergeleitet

    So, beide Methoden funktionieren im Browser, jedoch nicht wenn das erste Script per CronJob gestartet wird (das erste wird ausgeführt). Aber weiter als das erste gehts dann nicht.

    Meine Frage: Wieso funktionieren meine o.g. Methoden nicht. Ich war mir eigentlich sicher das es mit HEADER möglich wäre ein weiteres Script oder auch sich selbst erneut aufzurufen um den max_execution_time aus dem Weg zu gehen.

    Über jegliche Hilfestellungen bin ich sehr dankbar.

  • #2
    ini_set() sollte dir helfen können.

    damit kannst du u.a. auch die exe-time erhöhen, z.b. auf 2 min für das eine script.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Hallo,
      danke für den Befehl, kannte ich noch nicht.

      Im Handbuch findet man nur eine Tabelle mit den Werten die man ändern kann, aber meine Frage dazu: Kann man die mittels ini_set() 100%ig für die Dauer des Scriptes ändern, oder muss ich da wieder was beachten? Zum Beispiel weitere Servereinstellungen damit man ini_set() benutzen kann?

      Ich werde es jetzt ersteinmal testen und danke dir für die schnelle Antwort.

      P.S: Mich würde trotzdem gerne interessieren warum meine HEADER Weiterleitungen nicht funktionieren.

      Kommentar


      • #4
        Die Lösung für Browser über header() ist nicht sehr sauber. Einige Browser mit schärferen Sicherheitseinstellungen haben eine Weiterleitungslimitation und könnten das Script evtl. frühzeitig abbrechen.

        Kommentar


        • #5
          Original geschrieben von Happy Nihilist
          Die Lösung für Browser über header() ist nicht sehr sauber. Einige Browser mit schärferen Sicherheitseinstellungen haben eine Weiterleitungslimitation und könnten das Script evtl. frühzeitig abbrechen.
          Ich sagte ja auch nicht das mein Problem das HEADER im Browser sei, sondern wenn der CronJob das Script ausführt ;-)

          Kommentar


          • #6
            Und sagte, dass auch wenn es funktioniert, diese Lösung nicht sehr sauber ist!

            Kommentar


            • #7
              Ich poste mal den Code aus der kleinsten Datei die die nächste Datei aufrufen soll. Nur der Cronjob führt den Header nicht aus, obwohl ich jetzt schon in diversen Foren gelesen habe das diese Methode funktioniert.

              PHP-Code:
              include("../mysql.php");
              $zeit_start time();
              $query_mylog="select * from updatelog";
              $result_mylog=mysql_query($query_mylog);
              $nd=mysql_fetch_array($result_mylog);

              $query_vk_t="delete from verkauft";
              $result_vk_t=mysql_query($query_vk_t);

              $zeit_ende time();
              $zeit=abs($zeit_start-$zeit_ende);
              $query_zeit="insert into wut_status (datei,zeit,jahr) values ('$PHP_SELF','$zeit','$nd[adatum]')";
              $result_zeit=mysql_query($query_zeit);

              $url="wut_typ5.php";
              header("Location: $url"); 

              Kommentar


              • #8
                Re: PHP und CronJob

                Original geschrieben von MaikelCoke
                Meine Frage: Wieso funktionieren meine o.g. Methoden nicht. Ich war mir eigentlich sicher das es mit HEADER möglich wäre ein weiteres Script oder auch sich selbst erneut aufzurufen um den max_execution_time aus dem Weg zu gehen.
                weil es eine vollkommen andere geschichte ist, ob du ein php-script über einen client in einem HTTP-umfeld aufrufst, oder wie bei einem cronjob auf der konsole.

                header() erzeugt HTTP-header - aber was sollen die bringen, wenn HTTP gar nicht im ablauf vorkommt?
                und beim meta-refresh ist's analog, der kann ja auch nur dann wirken, wenn die ausgabe an einen client geht, der HTML versteht.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Genau da setzte meine Frage an:

                  Gibt es denn keine Möglichkeit (nur in PHP) wenn das Script per CronJob gestartet wurde, ein neues zu starten. Ich meine in verschiendenen Foren gelesen zu haben das HEADER funktioniert. Ich werde diese Threads mal rauskramen (nicht in diesem Forum).

                  MFG
                  Maikel

                  Kommentar


                  • #10
                    Gibts denn da wirklich keine Lösung? ich verzweifel langsam

                    Kommentar

                    Lädt...
                    X