Björn: PHP-Skript zeitgesteuert aufrufen

Hallo,

ich suche nach einer Lösung um ein PHP-Skript einmal am Tag zu einer bestimmten Uhrzeit aufzurufen. Folgendes ist mir wichtig.
Betriebssystem: Linux
Kein Application-Server
Kein wget / lynx ...
PHP ist ein Apache-Modul (also nicht als CGI Modul)

Also, ich suche eine Lösungen, die auf nahezu jedem Linux-System ohne allzu grosse Anpassungen läuft.
Ich dachte mir etwas wie, per cron-job, ein perl-skript aufrufen, dass das entsprechende Skript aufruft. Es muss kein Browserfenster aufgehen.
Das Skript durchsucht lediglich eine Termindatenbank und schaut ob irgendwelche Termin abgelaufen sind, falls ja, wird eine eMail verschickt.

Wäre super, wenn jemand ne Idee oder sogar fertigen code hat.
Dickes Danke schonmal!
Bjoern

  1. Hallo du da draußen,

    In das Verzeichnis /etc/cron.daily legst du folgendes Shellscript ab:

    telnet Das_PHP_Script.php

    Vielleicht gibt es noch einen Parameter, mit dem du dann irgendwie sagenkannst -c exit oder so ähnlich.

    Grüße von hier drinnen,

    Dogfish

    1. Moin!

      In das Verzeichnis /etc/cron.daily legst du folgendes Shellscript ab:

      telnet Das_PHP_Script.php

      Vielleicht gibt es noch einen Parameter, mit dem du dann irgendwie sagenkannst -c exit oder so ähnlich.

      Böses Foul!

      telnet ist ein Programm zum entfernten Arbeiten auf der Kommandozeile. Es erwartet als eigene Kommandozeile den Server, der zu kontaktieren ist. Default-Kontaktport ist 23.

      "Das_PHP_Script.php" ist definitiv keine Serverangabe, und Port 23 wird definitiv nicht vom Webserver benutzt. Außerdem fordert Telnet nicht automatisch eine Webseite vom Server an, daß muß man schon manuell machen.

      Besser wäre gewesen: lynx http://angabe.der.url/mit/pfad.php, wenn sowas überhaupt möglich ist.

      - Sven Rautenberg

  2. Hallo Dogfish,

    ich hatte da mal was gelesen, abe noch nicht ausprobiert.
    Es gibt in PHP die Funktionen sleep() und usleep().

    Vielleicht geht es mit denen, dass Du ein Schedule aufstellst und dann diese Funktionen aufrufst in den Unterprogrammen.

    Ich weerde das, was Du da willst, demnäcsht auch brauchen. Eine Antwort wäre deshalb fein.

    Gruß

    Tom

    ich suche nach einer Lösung um ein PHP-Skript einmal am Tag zu einer bestimmten Uhrzeit aufzurufen. Folgendes ist mir wichtig.
    Betriebssystem: Linux
    Kein Application-Server
    Kein wget / lynx ...
    PHP ist ein Apache-Modul (also nicht als CGI Modul)

    Also, ich suche eine Lösungen, die auf nahezu jedem Linux-System ohne allzu grosse Anpassungen läuft.
    Ich dachte mir etwas wie, per cron-job, ein perl-skript aufrufen, dass das entsprechende Skript aufruft. Es muss kein Browserfenster aufgehen.
    Das Skript durchsucht lediglich eine Termindatenbank und schaut ob irgendwelche Termin abgelaufen sind, falls ja, wird eine eMail verschickt.

    Wäre super, wenn jemand ne Idee oder sogar fertigen code hat.
    Dickes Danke schonmal!
    Bjoern

    1. Hallo!

      ich hatte da mal was gelesen, abe noch nicht ausprobiert.
      Es gibt in PHP die Funktionen sleep() und usleep().

      Die Funktionen sorgen lediglich dafür, das das Script X Sekunden bzw. Microsekunden gestoppt wird, aber ich habe z.B. bei den mmeisten Servern sowohl auf der Apache-Seite einen Timeout für PHP-Scripte, genauso in PHP selbst. 90 Sekunden, länger kann das eine Script nicht laufen bei mir. Also bringt das nicht wirklich viel. Unter Unix braucht man Cronjobs, unter Windows 'geplante Tasks'!

      Viele Grüße
      Andreas

      1. Moin

        Unter Unix braucht man Cronjobs, unter Windows 'geplante Tasks'!

        Oder einen Cron für Windows: http://www.kalab.com/freeware/cron/cron.htm
        Oder (unter NT oder 2000) 'at' (c:\help at).

        Gruß Frank

        1. Hallo!

          Oder (unter NT oder 2000) 'at' (c:\help at).

          Mensch, das kannte ich ja gar nicht, wirklich cool! Werde ich demnächst bestimmt mal verwenden!
          Grüße
          Andreas

  3. Hallo!
    Einfach einen Cronjob einrichten, mit dem Du ein PERL oder PHP Script aufrufst, und aus dem kannst Du dann Scripte aufrufen wie Du lustig bist. Oder Du macht dir für jedes Script nen eigenen Cronjob! Wenn Du aber Cronjobs kennst, verstehe ich Dein Problem nicht wirklich!
    Grüße
    Andreas

  4. Hallo,

    Ich dachte mir etwas wie, per cron-job,

    Ja warum tust Du es dann nicht per cron?
    Läuft Dein Script, wenns von der Kommandozeile gestartet wird? Dann gehts auch per cron!

    Das Skript durchsucht lediglich eine Termindatenbank und schaut ob irgendwelche Termin abgelaufen sind, falls ja, wird eine eMail verschickt.

    Mir scheint, Du willst meinen terminmailer.de nachbauen ;-)

    Ich nutzte ein PerlScript, welches per cron gestartet wird. Ich hatte damals ein ähnliches Problem, als ich meinen terminmailer.de um die SMS-Funktion erweitern wollte. Die Schnittstelle zum Gateway ist in PHP geschrieben, ich nutzte Perl. Und da wollte ich auch umsteigen. Nun läufts weiter mit Perl, ich nutze die PHP-Schnittstelle, indem ich aus dem PerlScript per http das php-Script rufe. Ist zwar 'ne Krücke, machte damals aber den wenigsten Aufwand und läuft problemlos...

    Und falls Du was schönes zum lesen suchst, hier (m)ein Link zum Thema http://forum.de.selfhtml.org/archiv/2001/12/1630/#m9709

    Gruß Frank

    Bjoern

  5. Hi,

    ich suche nach einer Lösung um ein PHP-Skript einmal
    am Tag zu einer bestimmten Uhrzeit aufzurufen.
    Folgendes ist mir wichtig.
    Betriebssystem: Linux
    Kein Application-Server
    Kein wget / lynx ...
    PHP ist ein Apache-Modul (also nicht als CGI Modul)

    wenn Du alle sinnvollen Lösungen von vorn herein
    ausschließt, wird am Ende keine mehr übrig bleiben.

    Von wem ist dieses PHP-Skript? Muß es unbedingt PHP
    sein? Dein Fall ist ein klassisches Beispiel dafür,
    daß Perl eben nicht so starr auf die Verwendung im
    HTTP-Kontext ausgerichtet ist.

    In Perl würde ich sagen: Schreibe Dein Skript so,
    daß der Kern über eine Funktion-API aufrufbar ist.
    Diese kann sowohl von einer Schale, welche die Um-
    setzung zwischen CGI-Schnittstelle und Deiner API
    erledigt, aufgerufen werden wie von einer anderen
    Schale, welche beispielsweise Kommandozeilen-Para-
    meter in Deine API umsetzt.

    Ich halte es für falsch, für dieses Problem ein
    PHP-Skript via HTTP aufzurufen.
    Wieso willst Du Dich von der Verfügbarkeit des
    Webservers abhängig machen?

    Also, ich suche eine Lösungen, die auf nahezu jedem
    Linux-System ohne allzu grosse Anpassungen läuft.

    Einen Perl-Interpreter hättest Du dort.

    Ich dachte mir etwas wie, per cron-job, ein perl-
    skript aufrufen, dass das entsprechende Skript
    aufruft. Es muss kein Browserfenster aufgehen.

    Um als Perl HTTP ansprechen zu können, brauchst Du
    wiederum LWP-Module (CPAN). Die sind bei älteren Perl-
    Distributionen nicht automatisch vorhanden.

    Das Skript durchsucht lediglich eine Termindaten-
    bank und schaut ob irgendwelche Termin abgelaufen
    sind, falls ja, wird eine eMail verschickt.

    Und wieso ist so etwas unter Verwendung von HTTP gelöst?

    Wäre super, wenn jemand ne Idee oder sogar fertigen
    code hat.

    Ich fürchte, "mach's anders" ist die sinnvollste Idee,
    da Du PHP als separaten Interpreter ausgeschlossen hast.

    Viele Grüße
    <img src="http://www.schroepl.net/projekte/gzip_cnc/gzip_cnc.gif" border=0 alt=""> Michael

    1. Hi Michael!
      Jetzt hast Du mich ein wenig verwirrt!
      Ich dachte immer Cronjobs können Scripte entweder direkt oder über HTTP aufrufen, jedenfalls kann ich bei mir entweder eine http Adresse eingeben, oder den Serverpfad.
      Außerdem, wen ich PHP als CGI-Version installiert habe, bin ich dann immer auf den Webserver angewiesen? Oder sollten die auch alleine laufen?
      Womit kann man denn Scripte direkt zeitgesteuert aufrufen, ohne Cronjobs, also nicht mit HTTP?
      Viele Grüße
      Andreas

      1. Moin!

        Jetzt hast Du mich ein wenig verwirrt!

        Verwirrung ist gut. Verwirrung zerstört das möglicherweise festgefahrene Gedankenuniversum, rüttelt es gut durch, läßt den Verwirrten hilflos zurück und öffnet ihn für neue Impulse von außen. :)

        Ich dachte immer Cronjobs können Scripte entweder direkt oder über HTTP aufrufen, jedenfalls kann ich bei mir entweder eine http Adresse eingeben, oder den Serverpfad.

        Ein "Cronjob" ist nichts weiter als der regelmäßige, zeitgesteuerte Aufruf eines Kommandozeilenbefehls. Du kannst damit alles machen, was die Kommandozeile erlaubt. Die Kommandozeile erlaubt es nicht, daß man einfach "http://www.server.tld/dasphpscript.php" eingibt. Die Kommandozeile kann kein http.

        Außerdem: Was ist "bei dir"? "Bei mir" geht sowas nämlich nicht, und "bei allen anderen" eher auch nicht.

        Außerdem, wen ich PHP als CGI-Version installiert habe, bin ich dann immer auf den Webserver angewiesen? Oder sollten die auch alleine laufen?

        Man kann wohl durchaus PHP-Skripte auch einfach ohne Webserver direkt ausführen. So ein Skript tut ja im Prinzip nichts anderes, als ein Perl-Skript auch: Es schreibt seinen Output auf die Standardausgabedatei, welche im Webserverkontext dann an den Browser weitergeleitet wird, und im Kommandozeilenkontext auf den Bildschirm (wo HTML dann logischerweise nicht interpretiert wird).

        Womit kann man denn Scripte direkt zeitgesteuert aufrufen, ohne Cronjobs, also nicht mit HTTP?

        Falsche Formulierung. Cronjobs sind nicht HTTP, haben damit absolut nichts zu tun. Und ohne Cronjobs kannst du nicht zeitgesteuert Aufgaben erledigen. Ohne HTTP kannst du das aber sehr wohl. :)

        - Sven Rautenberg

        1. Hi Sven!
          Danke Dir, da hatte ich Michael wohl gerade etwas falsch verstanden ;-)
          "bei mir" heißt bei meinem Provider habe ich Zugriff über ein PHP-Script im Kundenmenü auf Cronjobs. Ich denke die haben da ein Script geschreiben, was das dann ales entsprechend übersetzt. Ich darf nur eine Datei auswählen, auf meinem Server oder per HTTP auf einem anderen. Wie das genau funktioniert weiß ich nicht, nur das dazwischen wohl nochwas passieren muß, wenn ich Deinen Ausführungen Glauben schenken kann ;-))
          Viele Grüße
          Andreas

        2. Hallo Sven,

          Man kann wohl durchaus PHP-Skripte auch einfach ohne Webserver direkt
          ausführen. So ein Skript tut ja im Prinzip nichts anderes, als ein
          Perl-Skript auch: Es schreibt seinen Output auf die Standardausgabe-
          datei, welche im Webserverkontext dann an den Browser weitergeleitet
          wird, und im Kommandozeilenkontext auf den Bildschirm (wo HTML dann
          logischerweise nicht interpretiert wird).

          nur braucht man dafür einen über die Kommandozeile ansprechbaren PHP-
          Interpreter, und so, wie ich sein Ausgangspostion interpretiere (PHP
          _nur_ als Apache-Modul), hat er genau diesen Weg ausgeschlossen ...

          Viele Grüße
          <img src="http://www.schroepl.net/projekte/gzip_cnc/gzip_cnc.gif" border=0 alt=""> Michael