Marcel H.: Serverseitiges Event zur Bestimmten Zeit ausführen

Moin moin,

ich habe eine Fragestellung über die ich mir den Kopf zerbreche.

Stellt euch das folgende als eine Art Wecker vor. In der Tat ist es wirklich so etwas ;)

Naja folgendes Szenario.

User A geht auf meine Seite und lässt sich einen Wecker für Morgen früh um 7:59:32 Stellen, damit er rechtzeitig zu Arbeit kommt.
Das geschieht der Einfachheit halber per Form und input. Alles einfach.

Dieses wird dann serverseitig verarbeitet und irgendwo gespeichert (wo ist eine sehr gute Frage)
Dann habe ich mir überlegt, wird das am einfachsten in einem Cronjob gespeichert, welches dann eine PHP-CLI Datei aufruft, die wiederum eine Mail verschickt.

Ich stelle mir hierbei selbst 2 Probleme.
Wenn ich nun, sagen wir mal übertriebener Weise, 1000 User habe und die alle um die Zeit von 8:00 Uhr erinnert werden wollen, dann wird das sicherlich ungenau. Ich weiß nicht wieso ;) aber ich denke es mir.

Dann nächste Frage. Ich habe zwar eine Linux-Umgebung zur Verfügung, möchte aber eigentlich nicht so tief ins System eingreifen, sondern bei PHP(-CLI) bleiben. Perl stellt für mich (k)eine Alternative da, da ich sie nicht beherrsche, sie aber nicht, wie PHP, zeitunabhängig ist, also könnte ich doch rein theoretisch ein Perl Script schreiben, dass alle Sekunde überprüft ob ein neuer Eintrag vorhanden ist. Naja..
Performance ist hier die Sache mal wieder.

Ihr seht. Egal wie ich es drehe und wende. Ich kriege keinen gescheiten Lösungsansatz.

Bitte um Hilfe :)

mfg

Marcel Hellwig

Ps. Es ist wirklich eine sekundengenaue Auslosung gefordert. Keine in etwa Sekunden.... :)

  1. Hello,

    Ps. Es ist wirklich eine sekundengenaue Auslosung gefordert. Keine in etwa Sekunden.... :)

    Welches Protokoll möchtest Du denn verwenden für diese "Weckanforderung"?

    Ich hoffe nur, dass sie nicht zu explosiv werden wird ...

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Kein Protokoll....
      es soll eine Serverseitige Aktion ausgeführt werden, meinetwegen eine PHP Script, das eine Mail verschickt. Sowas halt ;)

      1. Hello,

        Kein Protokoll....
        es soll eine Serverseitige Aktion ausgeführt werden, meinetwegen eine PHP Script, das eine Mail verschickt. Sowas halt ;)

        Achso. Wann die eMail dann verschickt wird, ist also egal?

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Naja.....

          das script soll sofort ausgeführt werden, ob jetzt die mail drei stunden später ankommt, weil sie noch nach dem weg fragen muss ist mir vollkommen latz... okay sagen wir es wird keine mail verschickst, es wird ein Datensatz aus einer lokalen MYSQL datenbank ausgelesen. Mehr nicht.

          Der Lösung sind wir noch kein stück näher........... :)

          1. das script soll sofort ausgeführt werden

            Das ist meines wissens nicht möglich - du kannst höchstens einen cronjob einrichten der z.B. alle 5 Minuten läuft und ein PHP-Script aufruft. Dort wird die wirklich exakte Zeit ermittelt und dann entscheidet ob was zu tun ist oder nicht.

            Wenn der Job nun um 0.05 Uhr läuft und das Script feststellt, dass um 0.11 Uhr etwas zu tun ist, tut es nichts.

            Um 0.10 Uhr läuft der Job nochmal, startet das Script und holt sich einer Liste der ToDo-Aufträge für die nächsten 5 Minuten.

            Dann werden die Aufträge sortiert und mit sleep() so zeitlich gesteuert, dass sie zum richtigen Zeitpunkt ausgeführt werden.

            1. Dann werden die Aufträge sortiert und mit sleep() so zeitlich gesteuert, dass sie zum richtigen Zeitpunkt ausgeführt werden.

              time_sleep_until() geht natürlich auch - zudem muss sichergestellt werden, dass die maximale Scriptlaufzeit hoch genug ist.

              1. time_sleep_until() geht natürlich auch - zudem muss sichergestellt werden, dass die maximale Scriptlaufzeit hoch genug ist.

                Soweit diese für die Kommandozeilenumgebung verändert wurde, da default=unendlich PHP auf der Kommandozeile

                Was spricht dagegen, das Script einfach laufen zu lassen? Geht doch gut.

                ZB endlos - do{ was; warte; } while(1)

                Gute Nacht

      2. [latex]Mae  govannen![/latex]

        Kein Protokoll....
        es soll eine Serverseitige Aktion ausgeführt werden, meinetwegen eine PHP Script, das eine Mail verschickt. Sowas halt ;)

        Sehr schlechtes Beispiel. Mail ist keine Echtzeit-Anwendung und kann durchaus mal bis im Stundenbereich oder länger benötigen, auch wenn es unüblich ist.

        Cü,

        Kai

        --
        ~~~ ken SENT ME ~~~
        Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
        in Richtung "Mess up the Web".(suit)
        SelfHTML-Forum-Stylesheet
        1. Sehr schlechtes Beispiel. Mail ist keine Echtzeit-Anwendung und kann durchaus mal bis im Stundenbereich oder länger benötigen, auch wenn es unüblich ist.

          Sag' das dem Mailserver bei mir in der Arbeit :D

  2. Moin

    ... welches dann eine PHP-CLI Datei aufruft, die wiederum eine Mail verschickt.

    Du solltest überlegen, ob das Internet wirklich "wecken" kann. Wie sollte eine hereinkommende Mail wecken?

    Auf einer HTML- Seite könnte man einen Klingelton starten. Also per Javascript einen mp3- Player einschalten (display:block statt none).

    Wie wäre es, wenn du sofort nach dem Weckerstellen eine HTML- Seite ausgibst, die der User nicht schließen darf. Im Hintergrund tickt als Zeitbombe Javascript und - WOOOOOOOM, um genau 8:00 Uhr werden 1000 User geweckt.

    MfG Muggler

    1. Mahlzeit Muggler,

      Wie wäre es, wenn du sofort nach dem Weckerstellen eine HTML- Seite ausgibst, die der User nicht schließen darf. Im Hintergrund tickt als Zeitbombe Javascript und - WOOOOOOOM, um genau 8:00 Uhr werden 1000 User geweckt.

      ... wenn sie denn beim Getöse des Lüfters und beim Gejaule der Festplatte(n) des neben ihnen stehenden PCs überhaupt schlafen konnten. ;-)

      MfG,
      EKKi

      --
      sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
      1. Hello,

        Wie wäre es, wenn du sofort nach dem Weckerstellen eine HTML- Seite ausgibst, die der User nicht schließen darf. Im Hintergrund tickt als Zeitbombe Javascript und - WOOOOOOOM, um genau 8:00 Uhr werden 1000 User geweckt.

        ... wenn sie denn beim Getöse des Lüfters und beim Gejaule der Festplatte(n) des neben ihnen stehenden PCs überhaupt schlafen konnten. ;-)

        Es gibt doch noch DynDNS und WOL. Das sollte dann helfen, den PC erst fünf Minuten vorher anzuschalten aus der Ferne, oder wie lange braucht Windows zum booten? Na gut, schalten wir ihn eben zehn Minuten vorher an ;-P

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
  3. Hi!

    Wenn ich nun, sagen wir mal übertriebener Weise, 1000 User habe und die alle um die Zeit von 8:00 Uhr erinnert werden wollen, dann wird das sicherlich ungenau. Ich weiß nicht wieso ;) aber ich denke es mir.

    Der Vorgang benötigt Zeit. Je mehr Anwender zu bedienen sind, desto mehr Zeit wird benötigt. Sollte soweit klar sein. Wieviele Vorgänge in einer Sekunde abgearbeitet werden können, hängt nicht zuletzt von deiner Programmierung ab.

    Dann nächste Frage. Ich habe zwar eine Linux-Umgebung zur Verfügung, möchte aber eigentlich nicht so tief ins System eingreifen, sondern bei PHP(-CLI) bleiben.

    Mit at kannst du sekundengenau Jobs starten.

    Lo!

    1. Hello,

      Mit at kannst du sekundengenau Jobs starten.

      Ich zitiere aus der Manual-Page:

      " At allows fairly complex time specifications, extending the POSIX.2 standard.  It accepts times of the form HH:MM to run a job at a specific time of  day."

      Dir Granularität ist als "pro Minute" und nicht "pro Sekunde"

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hi!

        Mit at kannst du sekundengenau Jobs starten.
        Ich zitiere aus der Manual-Page:
        " At allows fairly complex time specifications, extending the POSIX.2 standard.  It accepts times of the form HH:MM to run a job at a specific time of  day."
        Die Granularität ist als "pro Minute" und nicht "pro Sekunde"

        Tja, da gibts es wohl unterschiedliche Ausführungen. Die ManPage, die ich konsultierte versprach eine sekundengenaue Auflösung.

        Lo!

        1. Hello,

          Mit at kannst du sekundengenau Jobs starten.
          Ich zitiere aus der Manual-Page:
          " At allows fairly complex time specifications, extending the POSIX.2 standard.  It accepts times of the form HH:MM to run a job at a specific time of  day."
          Die Granularität ist als "pro Minute" und nicht "pro Sekunde"

          Tja, da gibts es wohl unterschiedliche Ausführungen. Die ManPage, die ich konsultierte versprach eine sekundengenaue Auflösung.

          Habe ich noch nie davon gehört oder gelesen, deshalb würde es mich interessieren, welche Distribution das ermöglicht.

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Hi!

            Tja, da gibts es wohl unterschiedliche Ausführungen. Die ManPage, die ich konsultierte versprach eine sekundengenaue Auflösung.
            Habe ich noch nie davon gehört oder gelesen, deshalb würde es mich interessieren, welche Distribution das ermöglicht.

            Kann ich grad nicht nachschauen, da wo ich das gelesen hab. Mein Gentoo hier ist da recht seltsam. In der manpage steht was von "Format wie bei touch", welches auch Sekunden zulässt. Allerdings gibt es kein at als ausführbares Programm. Wenn man dann aber das Paket sys-process/at hinzufügt, sagt die Manpage das was du zitiert hast.

            Lo!

            1. Hi!

              Tja, da gibts es wohl unterschiedliche Ausführungen. Die ManPage, die ich konsultierte versprach eine sekundengenaue Auflösung.
              Habe ich noch nie davon gehört oder gelesen, deshalb würde es mich interessieren, welche Distribution das ermöglicht.
              Kann ich grad nicht nachschauen, da wo ich das gelesen hab.

              Es ist ein HP-UX, bei dem man als Zeit [[CC]YY]MMDDhhmm[.ss] verwenden kann.

              Lo!

              1. Hello,

                Tja, da gibts es wohl unterschiedliche Ausführungen. Die ManPage, die ich konsultierte versprach eine sekundengenaue Auflösung.
                Habe ich noch nie davon gehört oder gelesen, deshalb würde es mich interessieren, welche Distribution das ermöglicht.
                Kann ich grad nicht nachschauen, da wo ich das gelesen hab.

                Es ist ein HP-UX, bei dem man als Zeit [[CC]YY]MMDDhhmm[.ss] verwenden kann.

                Ist das jetzt nur die allgemeine Definition für Zeitangaben oder die speielle für Zeitangaben bei Verwendung von at?

                Die allgemeine verwenden auch andere Distributionen in dieser Form, z.B. zum Setzen der Serverzeit. Das muss aber nicht gleichgebdeutend damit sein, dass at das auch beherrscht.

                Ich erinnere mich aber, dass ich im LPI-II eine Ergänzung zu at gesehen habe (wir haben damit leider nicht wirklich herumgespielt, weil wir in Verzug waren), die dann auch Sekunden berücksichtigt hat. Es war laut Manual streng verboten, denselben Job jede Sekunde zu starten. Vielleicht fällt mir der Name des Tools noch wieder ein...

                Liebe Grüße aus dem schönen Oberharz

                Tom vom Berg

                --
                 ☻_
                /▌
                / \ Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de
                1. Hi!

                  Es ist ein HP-UX, bei dem man als Zeit [[CC]YY]MMDDhhmm[.ss] verwenden kann.
                  Ist das jetzt nur die allgemeine Definition für Zeitangaben oder die speielle für Zeitangaben bei Verwendung von at?

                  Letzteres (natürlich), ich hab das direkt der at-Manpage entnommen.

                  Lo!