Tobias H.: Cronjob

Hey Leute,
wie kann ich am einfachsten bzw. elegantesten ein Skript (sei es PHP oder HTML) in regelmäßigen Abständen automatisiert aufrufen lassen?

würde mich über eine Hilfestellung sehr freuen.

LG Tobi

  1. Hello,

    wie kann ich am einfachsten bzw. elegantesten ein Skript (sei es PHP oder HTML) in regelmäßigen Abständen automatisiert aufrufen lassen?

    das notwendige Stichwort hast du doch über den Postingtitel schon gegeben. Cronjob. Oder eben geplante Tasks unter Windows. Bei der Einrichtung hilft dir ggf. dein Provider, sofern verfügbar ist das meistens sogar über die entsprechende Konfigurationsoberfläche einstellbar.

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    Let Bygones Be Bygones  --  Robert Pitscottie: "Chronicles of Scotland"
    1. Hey,
      danke für die schnelle Antwort.
      Ich habe ein php script das auch javascript enthält, welches ebenfalls ausgeführt werden muss.
      jetzt habe ich eine batch datei erstellt und rufe diese über einen task-manager von windows regelmäßig auf. aber leider führt die batch-datei das skript nicht wirklich aus. es passiert einfach nichts. woran kann das liegen? kann es sein, dass er das js-nicht ausführt?

      hier der code meiner batch-datei:
      D:/php/php.exe D:/Skript/update.php

      1. ach ja, ich habe auch noch einen datenbankzugriff auf einen mysql-datenbank. muss ich das ebenfalls in der batchdatei aufrufen?

        lg tobi

      2. Hello,

        Ich habe ein php script das auch javascript enthält, welches ebenfalls ausgeführt werden muss.

        das ist ein Problem - PHP spricht nunmal kein JavaScript. Wenn du die php.exe aufrufst, dann geht der PHP-Interpreter über das Skript drüber und liefert das Ergebnis. Vorab: Du musst die update.php so schreiben, dass sie autark lauffähig ist, wenn sie Datenbankzugriffe braucht, dann müssen diese dort entsprechend eingebunden sein.
        Die Interpretation des JavaScripts ist heikel, Windows spricht von Haus aus JScript, aber dazu müsste man erstmal wissen, was du eigentlich vor hast. Ich nehme an, das Ergebnis des PHP-Skripts ist HTML?

        MfG
        Rouven

        --
        -------------------
        sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
        Ambition is the last refuge of failure.  --  Oscar Wilde (Irish Poet, Novelist, Dramatist and Critic, 1854-1900)
        1. hey,
          also in der php-datei werden eben alle benötigten dinge via require_once eingebunden. die seite läuft wunderbar, wenn ich sie über den browser aufrufe. das js-script geht nach und nach alle einträge durch und trägt diese dann über ein ausgelagertes php-skript in ne DB ein. scheint mir so, als würde das via cronjob über die kommandozeile nicht umzusetzen sein... :(

          kann ich denn das skript über eine browser mit einem cronjob regelmäßig aufrufen (das würde ja dann funktionieren)...?

          lg tobi

          1. Hello,

            kann ich denn das skript über eine browser mit einem cronjob regelmäßig aufrufen (das würde ja dann funktionieren)...?

            das ist eine Möglichkeit, dann müsstest du als geplanten Task halt den Browser auf das generierte HTML ansetzen.
            Anders herum die Frage: Warum lässt du die Verarbeitung überhaupt durch JavaScript machen? Mache sie durch PHP, dann brauchst du keinen Browser.

            MfG
            Rouven

            --
            -------------------
            sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
            He is entertaining both out of the car and in the car because if you tell him that a corner is almost flat then he is the guy who is going to try to take it flat even if it means shunting it the other side of it, he will come with the data and say 'hey, I may have crashed and destroyed the car, but I was flat-out'. That is an interesting quality that he has!  --  Team Member on Jacques Villeneuve
            1. es geht leider nur via js, da ansonsten die ausführungszeit einer php-datei überschritten wird... :(
              aber wenn es über den browser gehen würde, wäre das eine feine sache.
              ich müsste dann wohl als task, z.b. den IE öffnen, oder? wie kann ich dann aber steuern, welche url er aufrufen soll?

              lg, tobi

              1. Hallo Tobias,

                es geht leider nur via js, da ansonsten die ausführungszeit einer php-datei überschritten wird... :(
                aber wenn es über den browser gehen würde, wäre das eine feine sache.

                Das Command-Line-Interface hat keine maximale Ausführungszeit. Du benötigst
                _keinen_ Webserver dafür. Du denkst noch viel zu kompliziert. Lass den Umweg
                aus dem Spiel.

                Freundliche Grüße

                Vinzenz

                1. Hallo Vinzenz,
                  also ich habe das ganze jetzt so gemacht, wie du es mir sagtest...der interpreter läuft ein testscript wunderbar durch. allerdings kommt bei meinem script jetzt die fehlermeldung:
                  zend_mm_heap corrupted

                  weißt du, was das sein könnte?

                  lg tobi

                  1. Hallo

                    also ich habe das ganze jetzt so gemacht, wie du es mir sagtest...der interpreter läuft ein testscript wunderbar durch. allerdings kommt bei meinem script jetzt die fehlermeldung:

                    Welche PHP-Version, was macht Dein Skript, welche DB-Treiber werden genutzt, ...

                    zend_mm_heap corrupted

                    dazu liefert mir Google über 7000 Ergebnisse :-)

                    weißt du, was das sein könnte?

                    Ein Bug in Deinem Code, ein Bug in PHP, ...
                    ... meine Glaskugel ist immer noch nicht geputzt.

                    Freundliche Grüße

                    Vinzenz

                    1. Hey,
                      also ich nutze PHP 5.2.5 und benutze MySQL als Datenbank. Das Script hat soweit keine Bugs. Muss also an was anderem liegen.

                      hab da was von nem Patch gelesen, den man installieren muss... weiß aber jetzt auch nicht weiter...:(

                      lg tobi

          2. Hallo,

            also in der php-datei werden eben alle benötigten dinge via require_once eingebunden. die seite läuft wunderbar, wenn ich sie über den browser aufrufe. das js-script geht nach und nach alle einträge durch und trägt diese dann über ein ausgelagertes php-skript in ne DB ein.

            das ist ein Konzeptionsfehler :-)

            scheint mir so, als würde das via cronjob über die kommandozeile nicht umzusetzen sein... :(

            Sowas ist als Cronjob problemlos durchführbar.

            Freundliche Grüße

            Vinzenz

            1. Hallo Vinzenz,
              das bringt mir leider nichts... musst mir schon auch sagen wie ich das umsetzen kann... :D
              also wenn du ne gute idee hast, dann würde ich mich sehr freuen... ;)

              lg tobi

              1. Hallo Tobias,

                das bringt mir leider nichts... musst mir schon auch sagen wie ich das umsetzen kann... :D

                wieso? Wo ist das Problem?
                Reduziere die Aufgabenstellung:
                a) Welche Daten sind zu verarbeiten
                b) Was muss in der DB gespeichert werden.

                Daraus ganz simpel - ohne irgendwelches HTML oder gar Javascript erzeugen zu
                müssen - dem EVA-Prinzip folgen:

                1. E: Eingangsdaten einlesen.
                2. V: Daten verarbeiten
                3. A: Verarbeitete Daten in die DB speichern.

                Da Dein PHP die Einträge in der HTML-Seite erzeugt, die von dem Javascript
                abgearbeitet werden, das möglicherweise AJAX-Requests absetzt oder wie auch
                immer (meine Glaskugel ist immer noch nicht geputzt), die wiederum von PHP
                zu SQL-Statements verarbeitet und an einen DB-Server abgesetzt werden. Den
                Umweg über HTML/Javascript ersparst Du Dir einfach. Es wird einfacher, nicht
                komplizierter.

                Freundliche Grüße

                Vinzenz

                1. Hey Vinzenz,
                  das wollte ich ja auch zu beginn so machen, allerdings brauche ich das js, da ansonsten die execution-time des PHP-Interpretors überschritten wird. um diesem aus dem weg zu gehen habe ich das ganze mit einem js-programm verhindert.

                  aber es wäre super, wenn du wissen würdest, wie ich das script im cronjob über einen browser aufrufen kann.

                  vielen dank für die bisherigen antworten.

                  lg tobi

                  1. hey,
                    hier is das forum, welches ich meinte:
                    http://www.webhostingtalk.com/showthread.php?t=661186

                    verstehst du vllt, wie ich den patch machen soll unter einem windows server?

                    lg tobi

                    1. Hallo Tobias,

                      http://www.webhostingtalk.com/showthread.php?t=661186
                      verstehst du vllt, wie ich den patch machen soll unter einem windows server?

                      nutze einen Testrechner, um festzustellen ob Dein Skript mit dem aktuellen
                      Build fehlerfrei läuft. Wenn ja, installiere separat diesen Build
                      ausschließlich für diesen Job. Wenn die neue Releaseversion von PHP erscheint,
                      kannst Du auf diese zurückgreifen. Soweit ich das verstanden habe, ist ja der
                      Bug inzwischen gefixt und wird in PHP 5.2.6 nicht mehr enthalten sein.

                      Freundliche Grüße

                      Vinzenz

                  2. Hallo,

                    du kannst den Timeout einfach ändern - wenn du die Rechte dazu hast.
                    Oder du machst es so wie ich es bei meiner Galerie z.B. mache. Dort lade ich mit php die großen Bilder einfach rauf und wenn ich dann ein Skript aufrufe werden automatisch die mittelgroßen Webbilde rund die Thumbnails erstellt und die ganz großen gelöscht.
                    Bei 100 Bildern dauert das natürlich mehr als 30 Sekunden.
                    Jetzt schaut also das Skript immer, welche Bilder noch nicht verarbeitet wurden und da macht es weiter.
                    Wenn du das so bei deiner Sache nicht machen kannst dann speichere nach jedem Datensatz irgendwo einen "Einmerker" ab  der dann beim nächsten aufruf weis wo er weitermacht.
                    Jetzt nur noch n paar mal aufrufen lassen und FERTIG

                    mfg
                    Alex

                    1. Hallo

                      du kannst den Timeout einfach ändern

                      welchen Timeout? PHP-CLI hat keinen! Wozu auch?

                      Freundliche Grüße

                      Vinzenz