zeitlich abhängige Aktionen
Andreas
- php
Hallo,
ich habe eine Terminverwaltung mit php erstellt und möchte x-Tage vor einem Ereignis eine Erinnerungsmail absenden.
Meine erste Idee war per Cronjob einmal täglich ein Script auszuführen. Doch wie funktioniert das mit dem Cronjob? Welche Anforderungen gibt es an das Script? Welche (kostenlose) Dienste gibt es?
Gruß Andreas
Hello,
Meine erste Idee war per Cronjob einmal täglich ein Script auszuführen. Doch wie funktioniert das mit dem Cronjob? Welche Anforderungen gibt es an das Script? Welche (kostenlose) Dienste gibt es?
Dazu musst Du auf irgend einem Server Chronjobs oder "Aufgaben" einrichten können.
Dieser muss ein Werkzeug zur Verfügung bekommen, das dann die Arbeit durchführt.
Wenn alle Server auf einer Maschine liegen, ruft der Chronjob-Prozess den passenden Interpreter für Dein Script auf (im Hintergrund) und dieses führt die Aufgabe durch, so als hättest Du es über HTTP aufgerufen.
Wenn Deine Seite Besucher hat, kannst Du den Startaufruf aber auch z.B. in die Startseite einbauen. Das kostet auch nicht viel Power. Die eigentliche Aktion wird dann aber nur gestartet, wenn sie nicht schon erledigt wurde...
Du benötigst dafür aber die Möglichkeit, einen Systemaufruf durchführen zu können und eine Instanz des Interpreters in den Hintergrund zu laden, damit Dein Besucher nicht auf Erledigung des Jobs warten muss.
Welches OS hast Du für den Webserver?
Welchen Webserver hast Du?
Hast Du zugriff auf die Konsole des OS?
Darft Du Systemprogramme ausführen (lassen)?
Darfst Du Chronjobs einrichten? (dann solltest Du auch den Interpreter aufrufen dürfen)
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hallo,
habe ein Webpack L bei HostEurope, bin ziemlich sicher dass da kein Cronjob enthalten ist, die gibts erst bei dedicated Webspace.
Ich habe mal hier im Foum gelesen dass es Dienste bzw. Anbieter gibt die kostenlos Cronjob ausführen lassen können, Z.B. freenet oder ähnlich.
Ich hab mir auch überlegt, dass ich in die index.php diese Prüfung der Serverzeit vornehme, z.B. wenn ich täglich um 0:00 Nachts das Script ausführen lassen möchte, könnte ich bei jedem laden der Datei prüfen ob 0:00 ist oder später. Wenn Prüfaktion gestartet ist setze ich einfach ein Flag, damit das System nicht überlauft.
Wenn ein Robot oder Besucher halt erst morgens um 7:00 die Seite besucht wird das Script halt erst dann ausgeführt.
Was meint ihr, sowas wäre doch sicherlich auch machbar, bei einer halbwegs häufig besuchten Seite.
Gruß Andreas
hi,
Ich habe mal hier im Foum gelesen dass es Dienste bzw. Anbieter gibt die kostenlos Cronjob ausführen lassen können, Z.B. freenet oder ähnlich.
Bei solchen Diensten kannst du idR. einen HTTP-URL angeben, unter dem dein Script aufrufbar ist.
gruß,
wahsaga
Hello,
Was meint ihr, sowas wäre doch sicherlich auch machbar, bei einer halbwegs häufig besuchten Seite.
Du hast die Fragen bisher nicht beantwortet, oder hatte ich gar vergessen, sie zu stellen? *gg*
Nö, hab gerade nochmal nachgeschaut.
Wenn Du exec() benutzen darfst und den PHP-Interpreter damit aufrufen darfst, und die Ausführungszeit beeinflussen darfst, hast Du schon gewonnen. Dann brauchst Du nur noch zwei zeitlich statistisch gut verteilte Besucher am Tag, und alles wird gut :-))
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Halo Tom,
sorry, hab es nicht kapiert und meine beste Strategie war es einfach zu ignorieren :)
Wie erfahr ich ob ich exec() ausfürhen kann? Ist das ein PHP Befehl?
Gruß Andreas
Hello,
sorry, hab es nicht kapiert und meine beste Strategie war es einfach zu ignorieren :)
Wie erfahr ich ob ich exec() ausfürhen kann? Ist das ein PHP Befehl?
Wie erfährst Du, ob exec() eine PHP-Funktion ist?
< http://de3.php.net/manual/en/index.php>
oder
http://de3.php.net/manual/en/ref.exec.php
oder
http://de3.php.net/manual/en/function.exec.php
Und ob Du es benutzen darfst?
Einfach mal ausprobieren mit einem einfachen Kommando für das jeweilige OS, auf dem Dein PHP läuft.
Wenn das dann ein erwartetes Ergebnis gibt, darfst Du es benutzen.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hi,
echo exec('whoami');
gibt "nobody" auf dem Bildschirm aus.
Bedeutet das ich kann exec() einsetzen?
Gruß Andreas
Hallo Andreas.
echo exec('whoami');
gibt "nobody" auf dem Bildschirm aus.
Bedeutet das ich kann exec() einsetzen?
Ja, „nobody“ ist hier also der Username, unter dem der Apache läuft.
Einen schönen Montag noch.
Gruß, Ashura
Hello,
echo exec('whoami');
gibt "nobody" auf dem Bildschirm aus.
Bedeutet das ich kann exec() einsetzen?Ja, „nobody“ ist hier also der Username, unter dem der Apache läuft.
Der nächste Schritt wäre nun, zu prüfen, ob Du mittels Exec einen PHP-Interpreter starten darfst.
<?php ### start_process.php ###
$pid=exec("/usr/local/bin/php run.php > /dev/null & echo $!",$_ergebnis,$error);
echo "<pre>\n";
echo "Prozess-Nummer: $pid \n";
echo "Fehlercode: $error \n";
echo "</pre>\n";
?>
und
<?php ### run.php ###
file_put_contents('testausgabe.txt','Prozess konnte gestartet werden\n"');
?>
Erstmal so zum Testen.
Dann wäre noch spannend, ob Du auch set_time_limit(0) verwenden darfst.
http://de2.php.net/manual/de/function.set-time-limit.php
Dann könntest Du nämlich einen Prozess abspalten, der im Hintergrund dauernd läuft und seinerseits wieder Prozesse ausführen lassen kann.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hallo.
habe ein Webpack L bei HostEurope, bin ziemlich sicher dass da kein Cronjob enthalten ist, die gibts erst bei dedicated Webspace.
Chronisch ungünstig.
MfG, at
Was genau meinst du? Ein Cronjob ist einfach ein Befehl der von einem 24/7 laufenden Daemon ausgeführt wird. Der muß dann halt ein php-sript aufrufen, welches dann alle Termine durchgeht und schaut ob die einer Errinerung bedürfen. Was meinst du mit Dienste? Ein Cron-Daemon an sich ist natürlich kostenlos, aber niht jeder hat bei seinem Webpacket Cronjobs drin. Wir können dir ja nicht sagen welchen Leistungsumfang dein Paket hat.