Aufgaben automatisieren ohne Cronjobs
Betreibt man eine Webseite möchte man vielleicht gern gewisse Aufgaben automatisieren. Hat man Cronjobs zur Verfügung besteht ist die Aufgabe nur darin die entsprechenden Wartungsscripte bereitzustellen. Wie es auch ohne Cronjobs geht zeigt dieser Artikel.
Automatisch Scripte starten…
In diesem Beispiel wird davon ausgegangen das Sie ein Termin/Kleinanzeigen Script betreiben. Hier wird es ab und zu nötig sein alte Einträge zu löschen, Benachrichtigungen zu versenden oder Statistiken upzudaten. Damit man das nicht Tag für Tag von Hand erledigen muss braucht es eine kleine Wartungsroutine die das übernimmt.
Zunächst wird eine Datenbanktabelle angelegt die die nötigen Daten speichert.
CREATE TABLE wartung ( wartungs_id int(10) unsigned NOT NULL auto_increment, wartungsdate datetime NOT NULL default '0000-00-00 00:00:00', wartungsintervall int(10) NOT NULL, aktiv tinyint(1) NOT NULL default '0', logwartung tinyint(1) NOT NULL default '0', wartungsfunkion varchar(250) NOT NULL, beschreibung varchar(250) NOT NULL, PRIMARY KEY (wartungs_id) ) ENGINE=MyISAM;
In diese Tabelle trägt man nun die Daten ein die für die zu eledigenden Wartungsaufgaben nötig sind.
INSERT INTO wartung VALUES (1, '2011-07-16 13:03:25', 86400, 1, 1, 'cron/daywartung.php', 'Taegliche Wartung'); INSERT INTO wartung VALUES (2, '2011-07-15 21:59:29', 600, 1, 1, 'cron/emailinfo.php', 'E-Mailinfos senden'); INSERT INTO wartung VALUES (3, '2011-07-17 12:15:29', 7200, 1, 1, 'cron/statistik.php', 'Statistik update');
Dabei entspricht: | |
1 | Datensatz ID |
2011-07-16 13:03:25 | Aktueller Datum und Zeit |
86400 | Abstand der Wartungsaufrufe in Sekunden |
1 | aktiv Ja/Nein |
1 | Log speichern für Aufgabe Ja/Nein |
cron_daywartung.php | aufzurufende Datei |
Taegliche Wartung | Beschreibung |
Die Wartungsroutine
Damit was passiert muss natürlich auch die Wartungsroutine definiert sein, diese wird im Script dann einfach per
run_wartung();
aufgerufen.
// Beispielcode // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // // Wartungsaufgaben erledigen // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // function run_wartung() { global $pfad; $wartung = mysql_fetch_array("SELECT wartungs_id, wartungsdate, wartungsintervall, logwartung, wartungsfunkion FROM wartung WHERE NOW() > wartungsdate AND aktiv = 1 ORDER BY wartungsdate LIMIT 1"); $menge = mysql_num_rows($row); if($menge == 1 && file_exists($pfad.'/'.$wartung['wartungsfunkion'])) { include_once($pfad.'/'.$wartung['wartungsfunkion']); } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //
Diese Routine liest nun den Datensatz aus dessen Wert in der Spalte wartungsdate überschritten ist. Wird etwas gefunden wird das nötige Script includiert und somit die dort definierte Aufgabe ausgeführt.
Wichtig!
In dem includierten Wartungsscript muss zuletzt der Wartungsdatum aktualisiert werden. Ansonsten würde immer nur ein Script gestartet. Ist also z.B. der Wartungsintervall 86400 Sekunden wird mit nachfolgendem Query der Wartungsdatum um die angegebene Sekundenzahl erhöht.
UPDATE wartung SET wartungsdate = DATE_ADD(NOW(), INTERVAL ".$wartung['wartungsintervall']." SECOND) WHERE wartungs_id = ".$wartung['wartungs_id']." LIMIT 1
Bei den nächsten aufrufen wird nun fortlaufend die Warungsroutine ausgeführt deren Wartungsdatum überschritten ist. Wird aktuell keine Wartungsaufgabe gefunden tut das Script nichts.
Log der Wartungsaufgaben
Hat man das Logging der Aufgaben aktiviert braucht man in der jeweiligen Wartungsroutine nur noch einen Query absetzen, der dann in einer seperaten Tabelle die Aufgabenausführung dokumentiert. Dort können dann z.B. der Datum, die Anzahl betroffener Datensätze uam. gepeichert werden.
Keine Kommentare vorhanden