Aqua: Script beendet sich selbst nach 10 sek und ruft sich neu auf

Hallo!

Wie kann ich erreichen,
dass sich foo.pl  nach 10 Sekunden beendet
(Herausfinden dass es 10 Sek läuft gehört dazu) und dann beenden,
und gleich nach dem Beenden selbst neu aufrufen.

Ich dachte an
   1) META-Refresh alle 10 Sekunden
   2) Javascript  window.location

ist aber beides unsauber.

Header-Daten senden ist auch nicht möglich,
da ein Header zu Beginn der 10 Sekunden ausgegeben wird,
und ich glaube nachträglich geht das nimmer (Header-Redirect)

Ich hörte im Chat von Henryk den tip "HTTP-Request absetzen"
aber das konnten wir auch nicht weiter verfolgen.

Wie geht das nun ganz exakt richtig und sauber?

Danke!
Aqua

  1. Hallo Aqua,

    Wie kann ich erreichen,
    dass sich foo.pl  nach 10 Sekunden beendet
    (Herausfinden dass es 10 Sek läuft gehört dazu) und dann beenden,
    und gleich nach dem Beenden selbst neu aufrufen.

    Ich habe eine Idee, aber keine Ahnung, wie man sie umsetzt:

    Das Script macht als erstes einen Cron-Job, der es nach zehn Sekunden
    beendet und danach wieder aufruft. Irgendwie sollte man aber verhindern,
    dass es ewig läuft ;-)

    Gruß
    Alexander Brock

    --
    SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:? ss:| de:> js:( ch:| sh:( mo:} zu:}
    http://againsttcpa.com
    1. Hallo Alexander,

      Ich habe eine Idee, aber keine Ahnung, wie man sie umsetzt:

      Das Script macht als erstes einen Cron-Job, der es nach zehn Sekunden
      beendet und danach wieder aufruft. Irgendwie sollte man aber verhindern,
      dass es ewig läuft ;-)

      *uarghh* ;-)

      Um die Laufzeit eines Skripts zu bestimmen, habe ich in PHP die Zeit zu Beginn des Skripts die Zeit in eine Variable gespeichert, um diese am Ende mit der Endzeit (der aktuellen Zeit am Ende) zu vergleichen.

      Da kann man sich doch sicher eine Funktion basteln, die immer die gespeicherte Zeit mit der aktuellen Zeit vergleicht, und die dann das Skript abbricht sobald 10 Sekunden erreicht sind.
      Über diese Möglichkeit könnte man das Verhalten eines Skripts jedenfalls besser (und vor allem kontrollierter!) abbrechen, da man hier sinnvolle Stellen eines Abbruchs definieren kann (z.B. wenn ein bestimmter Dateizugriff beendet wurde).

      Weiterhin hat man so die Möglchkeit, nicht nur das Skript abzubrechen - sondern z.B. eine intensive Rechenoperation zu verlassen und das Ende des Skripts (z.B. die Ausgabe an den Browser) durchzuführen, mit dem Hinweis dass das Skript abgebrochen wurde.

      Eine Idee?

      Marc Reichelt || http://www.marcreichelt.de/

      --
      Linux is like a wigwam - no windows, no gates and an Apache inside!
      SELFCode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
      http://emmanuel.dammerer.at/selfcode.html
    2. Halli hallo,

      Das Script macht als erstes einen Cron-Job, der es nach zehn Sekunden

      oh bitte nicht. Das läuft einen Tag lang und die /var/log/messages läuft über Maßen voll. Ausschalten könnte man diese Meldungen zwar, aber nur global und nicht scriptspezifisch.

      Allderdings könntest du mit exec einen Childprozess aufrufen, der den Parentprozess nach 10 Sekunden - sleep(10) - killt und neu aufruft. Exakt 10 Sekunden werden das wohl auch nicht sein, aber ganz genau wirst du es wohl nicht hinbekommen. Eine weitere Variante (ohne exec) wäre natürlich, ein weiteres kleines Script zu schreiben, dem du als Parameter die Prozess-ID mitgibst und den Pfad+Scriptnamen, um das Script zu stoppen und wieder neu zu starten.

      Ist ein schweres Unterfangen, aber so würde ich mir das vorstellen, wenn ich dich richtig verstanden habe.

      Viele Grüße,
      coolblue

      --

      never say oops after you submitted a job :-)
      _der_Ton_macht_die_Musik_!!!_
      1. Allderdings könntest du mit exec einen Childprozess aufrufen, der den Parentprozess nach 10 Sekunden - sleep(10) - killt und neu aufruft. Exakt 10 Sekunden werden das wohl auch nicht sein, aber ganz genau wirst du es wohl nicht hinbekommen. Eine weitere Variante (ohne exec) wäre natürlich, ein weiteres kleines Script zu schreiben, dem du als Parameter die Prozess-ID mitgibst und den Pfad+Scriptnamen, um das Script zu stoppen und wieder neu zu starten.

        Warum so umständlich?

        einfach wie Siechfred schon sagte
        https://forum.selfhtml.org/?t=97791&m=595624
        $SIG{ALRM} verwenden.

        Struppi.

  2. Tag Aqua.

    Wie kann ich erreichen,
    dass sich foo.pl  nach 10 Sekunden beendet

    Z.B. mit Hilfe von $SIG{ALRM} und der alarm()-Funktion.

    Header-Daten senden ist auch nicht möglich,
    da ein Header zu Beginn der 10 Sekunden ausgegeben wird,
    und ich glaube nachträglich geht das nimmer (Header-Redirect)

    Du könntest ein META Refresh im Header unterbringen.

    [dsf 3.6]
    Siechfred

    --
    »Sie kochten heimlich mit Wasser und tranken öffentlich Wein.«