Johnny B.: Cronjob - Frage zum Selbstaufruf

Hallo geehrtes Forum,

ich bin mir nicht sicher, ob das überhaupt geht, daher mal eine Frage in den Raum des Wissens...

Ich habe ein Perlscript, welches sich mittels einer HTML-Ausgabe mit inkludiertem Javascript-Timer wieder selbst aufruft. Es wird dort pro Aufruf eine Aktion erledigt. Alle Aktionen hintereinander in einem Script würden zum Timeout führen, daher der hingebastelte Weg mit dem Selbstaufruf (ähnlich wie bei der Backup-Funktion von MySQL-Dumper). Dies funktioniert soweit zufriedenstellend.

Nun würde ich diese Aufgabe gerne als Cronjob direkt auf dem Server starten und nicht von meinem Rechner zuhause. Ergebnis: das Script wird einmalig aufgerufen - logischerweise. Ich weiß nicht genau, wo die HTML-Ausgabe landet, jedenfalls führt dies nicht zum Selbstaufruf. Das hatte ich allerdings auch nicht erwartet.

Jetzt meine Frage:
gibt es eine Möglichkeit, am Ende des Scripts intern ohne HTML und Javascript einen Selbstaufruf zu machen, der den Timer wieder auf Null stellt - d.h. das Script endet ordnungsgemäß im Zeitrahmen und das daraufhin neu aufgerufene Script fängt "frisch" von vorne an.?

Ich habe solch einen Selbstaufruf (exec ?) bisher nicht "gewagt", da ich ungern mit einer verschachtelten Menge an Scripten, die dann doch alle gleichzeitig laufen und immer noch neue Scripte aufrufen, den Server belasten möchte.

Daher hier die Frage nach dem "OB?" und wenn ja "WIE"?

Besten Dank schonmal im Voraus.
JOhnnY

  1. hi,

    Ich habe ein Perlscript, welches sich mittels einer HTML-Ausgabe mit inkludiertem Javascript-Timer wieder selbst aufruft.

    Keine Ahnung, was Du da gebaut hast, hört sich nach Murks an. Machn richtigen cronjob und gut isses.

    Rolf

    1. Keine Ahnung, was Du da gebaut hast, hört sich nach Murks an. Machn richtigen cronjob und gut isses.

      "Alle Aktionen hintereinander in einem Script würden zum Timeout führen." - da ändert auch kein "richtiger cronjob" was dran?!??

      Ich habe es daher aufgeteilt in einzelne Arbeitsschritte. Ist murksig, dem mag ich zustimmen, aber in Ermangelung einer besseren Lösung immer noch besser als es läuft gar nicht.

      1. hi,

        Ich habe es daher aufgeteilt in einzelne Arbeitsschritte. Ist murksig, dem mag ich zustimmen, aber in Ermangelung einer besseren Lösung immer noch besser als es läuft gar nicht.

        Einzelne Prozesse wäre noch besser ;-)

        Wenns Dir nicht so auf die genaue Zeit ankommt, "wann" der oder die Jobs laufen sollen, baue einen Ajax-Request in eine Deiner Seiten ein, die möglichst oft aufgerufen wird, so mache ich das, bzw. die Fuzzi-Arbeit erledigen dann die Anderen so ganz nebenbei asynchron bei jedem Seitenaufruf. Vergiss nicht, auch dann eine Response zu senden, wenn die nicht im Browser gezeigt wird, der Webserver müllt sonst das error_log voll.

        --Rolf

        1. Hi Rolf,

          Wenns Dir nicht so auf die genaue Zeit ankommt, "wann" der oder die Jobs laufen sollen, baue einen Ajax-Request in eine Deiner Seiten ein, die möglichst oft aufgerufen wird, so mache ich das, bzw. die Fuzzi-Arbeit erledigen dann die Anderen so ganz nebenbei asynchron bei jedem Seitenaufruf. Vergiss nicht, auch dann eine Response zu senden, wenn die nicht im Browser gezeigt wird, der Webserver müllt sonst das error_log voll.

          --- ajax ist eine spannende Sache, hab ich mich noch nicht mit beschäftigt. Hört sich ziemlich cool an! Ist für mein Problem allerdings nicht hilfreich, da ich 1. nicht über genug Traffic auf eigenen Seiten verfüge und 2. das Script am Anfang des Tages, also 0:01, aufgerufen werden soll, wo sowieso ALLE schlafen und niemand mehr surft... ;)

          (und 3. würde sich doch im Falle zeitaufwendiger Scripte im Hintergrund die Reaktion der angezeigten Seite verlangsamen, oder nicht?!)

          Bitte um alternative Lösungsvorschläge...
          JOhnnY

  2. Daher hier die Frage nach dem "OB?" und wenn ja "WIE"?

    Ob nein.  Du musst das Skript auf einmal aufrufen.

    Ich würde mir da auch nciht soviel Sorgen machen, denn das Skript läuft ja nicht im CGI Kontext oder wird vom Server gestartet, d.h. du kannst dir hier ruhig mehr Zeit lassen.

    Struppi.

    1. Ich würde mir da auch nciht soviel Sorgen machen, denn das Skript läuft ja nicht im CGI Kontext oder wird vom Server gestartet, d.h. du kannst dir hier ruhig mehr Zeit lassen.

      --- ist das so? Ich habe keinen "eigenen" Cronjob, sondern nutze cronjob.de. Von dort wird mein Script auf meinem Webspace gestartet. Es unterliegt dabei doch denselben Zeitbeschränkungen als würde ich es von einem Browser aus starten, oder nicht?

      1. Ich würde mir da auch nciht soviel Sorgen machen, denn das Skript läuft ja nicht im CGI Kontext oder wird vom Server gestartet, d.h. du kannst dir hier ruhig mehr Zeit lassen.
        --- ist das so? Ich habe keinen "eigenen" Cronjob, sondern nutze cronjob.de. Von dort wird mein Script auf meinem Webspace gestartet. Es unterliegt dabei doch denselben Zeitbeschränkungen als würde ich es von einem Browser aus starten, oder nicht?

        Ach so. Ja in dem Fall schon.

        Dann bleiben dir nicht viele Möglichkeiten. Das Skript "heimlich" im Hintergrund starten wäre das sicherste. wobei du dann aber ein paar Punkte beachten musst. Du musst nebenläufigkeiten ausschliessen, also das nicht zweimal der gleiche Aufruf erfolgt und einen Status der von jedem Prozess ausgelesen werden kann. Aber das mit der Uhrzeit wirst du so nicht hinbekommen.

        Struppi.

        1. Dann bleiben dir nicht viele Möglichkeiten. Das Skript "heimlich" im Hintergrund starten wäre das sicherste. wobei du dann aber ein paar Punkte beachten musst. Du musst nebenläufigkeiten ausschliessen, also das nicht zweimal der gleiche Aufruf erfolgt und einen Status der von jedem Prozess ausgelesen werden kann. Aber das mit der Uhrzeit wirst du so nicht hinbekommen.

          --- Du beziehst Dich auf den Vorschlag von Rolf, mit jedem Seitenaufruf "heimlich" einen Scriptaufruf zu verbinden? Das ist aus den in meiner Antwort genannten Gründen leider keine gute Alternative.

          Ich konstatiere also, daß es keine Möglichkeit gibt, ein zweites Script von einem ersten Script aus aufzurufen und das erste Script danach ordnungsgemäß zu beenden ohne damit der zweite Script ebenfalls zu beenden?

          (diesen Gedanken mit einem dritten, vierten, usw... Script weitergeführt)

      2. Ich würde mir da auch nciht soviel Sorgen machen, denn das Skript läuft ja nicht im CGI Kontext oder wird vom Server gestartet, d.h. du kannst dir hier ruhig mehr Zeit lassen.
        --- ist das so? Ich habe keinen "eigenen" Cronjob, sondern nutze cronjob.de.

        Na, was die können, kannst Du doch auch. Also den Job von _deinem_ Rechner aus anstoßen.

        Ich würde da ne richtige Monitor-Seite mit Ajax bauen, wo ich da gleich sehen kann was da geht (oder nicht).

        Horst Pfifferling