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

Ausgedruckt am: 19.03.2024 um 08:03 Uhr

Mitglied: Snowman25
Snowman25 22.02.2017 um 12:03:43 Uhr
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
Mitglied: tsunami
tsunami 22.02.2017 um 20:11:25 Uhr
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...
Mitglied: Snowman25
Snowman25 23.02.2017 um 10:04:02 Uhr
Goto Top
Zitat von @tsunami:

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

Korrekt.
Spricht da etwas dagegen?
Mitglied: tsunami
tsunami 23.02.2017 um 12:04:38 Uhr
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...
Mitglied: Snowman25
Snowman25 23.02.2017 um 21:15:35 Uhr
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?
Mitglied: tsunami
tsunami 24.02.2017 um 10:13:36 Uhr
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
Mitglied: tsunami
tsunami 25.02.2017 um 09:49:20 Uhr
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