Skip to main content

Alles für die Homepage... Scripte, Templates, Workshops und Support

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.

CODE:
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.

CODE:
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.

CODE:
// 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.

CODE:
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.


Ähnliche Beiträge



Keine Kommentare vorhanden


Du hast eine Frage oder eine Meinung zum Artikel? Teile sie mit uns!

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *