tsunami
Goto Top

Ein Script, verschiedene Intervalle für Cronjob

Hallo,
ich habe mal wieder einen Denkhänger.
Eine Seite mit Scripten soll via Cronjob aufgerufen werden. Soweit klar.

Nun habe ich aber die Aufgabe verschiedene Startzeiten zu setzen. Bsp. TÜV alle zwei Jahre, Heizungswartung jedes Jahr, Serverwartung alle 3 Monate usw.

EIne Variante ist natürlich mit Zähler und "%" Also Tage zählen, den letzten Jobaufruf und wenn die Differenz (%) = 0, dann insert... $x++ usw.

Aber das fände ich blöd, weils dann vollläuft mit Datenmüll. Eine Idee ist nun irgendwie mit Startdatum und dann einfach alle x Tage prüfen.
Also wenn zb alle 60 Tage Reifen geprüft werden sollen, Tage aktuelles Datum minus Tage Startdatum, Wenn das glattes vielfaches von 60, dann ausführen...
Aber so richtig rund ist das nicht, oder?

Gibt es eleganteres?

mfG
tsunami

Content-Key: 330159

Url: https://administrator.de/contentid/330159

Printed on: April 25, 2024 at 15:04 o'clock

Member: Snowman25
Snowman25 Feb 22, 2017 at 11:03:43 (UTC)
Goto Top
Hallo @tsunami,

Elegenater wäre, das alles in einzelne Scripte bzw. Seiten zu packen und für jeden Job seinen eigenen Cronjob zu machen.
Die Ergebnisse speicherst du dann in einzelne Files und rufst diese in deiner originalen PHP-Datei ab, anstatt das Live-Output der Jobs zu nehmen.

Gruß,
@Snowman25
Member: tsunami
tsunami Feb 22, 2017 at 19:11:25 (UTC)
Goto Top
Vielen Dank für die Anregung.
Dann wird es kompliziert.
Aktuell habe ich sowas wie eine Erinnerung in der Datenbank.

Virenscanner neu alle 365 Tage
Schlange füttern alle 3 Monate
TÜV alle 2 Jahre
...
Über ein Formular sollen halt neue Erinnerungen hinzufügbar sein. Oder meinst Du einfach 3 Tabellen? Monate, Tage, Jahre?
Aber das geht a auch nicht, denn wenn dann einer alle 4 Moante oder alle 7 Monate was machen muss...

Ich könnte es natürlich in drei Tabllen (Monatecron, Jahrecron und tagecron ) packen. Aber was mache ich dann mi Startdaten? EIner fängt am 1.1. an der nächste m 12.4. und wieder einer am 31.10. Dann müsste ich für jedes Event einen Cronjob anlegen...
Member: Snowman25
Snowman25 Feb 23, 2017 at 09:04:02 (UTC)
Goto Top
Zitat von @tsunami:

Dann müsste ich für jedes Event einen Cronjob anlegen...

Korrekt.
Spricht da etwas dagegen?
Member: tsunami
tsunami Feb 23, 2017 at 11:04:38 (UTC)
Goto Top
Ja, erstens hat der Provider nur bedingt Cron Jobs im Paket und zweitens wird es unübersichtlich. Und kann ich überhaupt per script cronjobs anlegen?

Es müsste irgendwie mit % gehen.

Also Startdatum zb 12.11.15, Intervall 7 MOnate.

Dann müsste ich doch mit heutigem Monatm also 2%11=9 rechnen. Geht aber nicht, da 31,30 und 28 Tage. Also irgendwie mit timestamp?
Anzahl von sekunden zwischen zwei daten, dann % und daraus die Monate errechnen. Wenn das = Intervall 7 ist, mache dies...
Member: Snowman25
Snowman25 Feb 23, 2017 at 20:15:35 (UTC)
Goto Top
Zitat von @tsunami:

Ja, erstens hat der Provider nur bedingt Cron Jobs im Paket und zweitens wird es unübersichtlich. Und kann ich überhaupt per script cronjobs anlegen?

Ich glaube wir sollten nochmal etwas früher anfangen.

Welches System nutzt du, was ist die Umgebung, welche Tools stehen dir zur Verfügung und was ist dein Ziel?
Member: tsunami
tsunami Feb 24, 2017 at 09:13:36 (UTC)
Goto Top
Also: Aktuell teste ich lokal auf nem klassischen xampp. Mysql und php. Später solls online laufen. Da habe ich ich meine 20 cronjobs.
Daher ist die Idee ein Script zu hinterlegen und us zu führen wo lediglich includes drinstehen, welche die einzelnen Skripte abspulen und bei Fälligkeit ausführen..

Zum aktuell Ziel:
Tabelle
id | beschreibung | startdatum | intervall | uu intervallwert

Da drin steht zb
1 | Schlange füttern | 12.02.2015 | 3 | monate
2 | Auto waschen | 11.10.2011 | 2 | wochen
3 | TÜV Termein | 11.10.2013 | 2 | Jahre

Herauskommen soll eine Todo Liste. Befüllt werden soll die Tabelle mit Formularen. Ein Ansatz war die Intervalle in Tage um zu rechnen, 3 Moante also 90 Tage, 2 Wochen 14 Tage, 2 Jahre 730 Tage. Dann einfach das heutige Datum, die Tagesdifferenz berechnen und dann mit modularteilung prüfen. Wenn 0, dann ausführen, Problem sind die unterschiedlichen Monatslängen. Dadurch verschiebt sich auf Dauer die Fälligkeit.

Ein weiterer Ansatz ist Timestamp von heute und startdatum nehmen, subtrahieren und daraus Monate und JAhre berechnen, dann wieder % und bei 0 Aktion.

Noch ein plumper Ansatz währe über eine Whileschleife das Intervall zum Startdatum hinzu zu addieren, bis der neue Wert in der Zukunft liegt oder gleich heute ist. Wenn gleich heute, dann Aktion. Nur das ist sehr Plump.

Oder aber man zählt immer hoch und packt jede Fälligkeit in die Datenbank, nur dann habe ich nen gigantischen Datenmüllberg nach wenigen Wochen. Dann simple vergleichen...

Im og Fall wären die Fälligkeiten:
Schlange füttern: 12.02.15, 12.05.15,12.08.15, 12.11.15, 12.2.16 usw
Auto waschen: 11.10., 25.10., 8.11., ...
TÜV: 11.10.13, 11.10.15, 11.10.17,...

Herauskommen soll dann sowas wie:
Plan für den 24.02.17
1. ....
2. ....
3. ...

Ist es nun klarer gworden?
Gruß tsunami
Member: tsunami
tsunami Feb 25, 2017 at 08:49:20 (UTC)
Goto Top
Guten Tag,
ich glaube, ich habe die Lösung, für mich gefunden. Der Ansatz mt der Whileschleife. Zusätzlich aber, wenn es eine Fälligkeit gibt, also (heute - startdatun)%intervall=0, dann gleichzeit ein update für das Startdatum mit dem Datum von heute. Dann explodiert der Aufwand nicht!

Oder habe ich nen Denkfehler?

Gruß
tsunami