PHP Script B aus Script A starten, aber nur alle 20 Minuten?

Belee

Lt. Commander
Registriert
Dez. 2006
Beiträge
1.518
Hallo

Um CronJobs zu sparen, suche ich nach einer Lösung um aus Script A, Script B zu starten...doch nur alle 20 Minuten. Script A wird jede Minute ausgeführt, Script B soll aber nur 3 mal die Stunde abgearbeitet werden.

Gibt es eine Möglichkeit das irgendwie auf einer einfach Art zu lösen?
 
logo.
entweder in einer datenbank die letze ausführung von script b speichern oder aber den timestamp in eine datei schreiben und auslesen.

wenn gelesener timestamp + 20 minuten < aktuelle zeit: öffne script b
 
Du meinst also ich erstelle eine quasi LOG, und prüfe vor dem Start von Script B ob die LOG älter als 20 Minuten ist? hört sich gut an.
Wie verhält es sich mit der Scriptausführungzeit? wird wenn Script B gestartet wird immer noch von Scrpt A ausgegangen? z.B. Script A brauch 10 Sekunden, startet dann Script B, dieses brauch 20 Sekunden, sind es dann bereits 30 Sekunden oder jeweils A->10 Sekunden->Ende->Neu B->20 Sekunden->Ende.
 
ja, denn wenn du script B z.b. per include in script A ausführst wird an die stelle wo der include beefehl ist quasi alles aus scriptB.php in scriptA.php eingefügt und script A quasi einfach erweitert.

am sinnigsten wäre es alles was script B macht in eine function zu packen, z.b.
PHP:
function scriptB() {
//bla bla bla
}

und dann, nachdem dann der timestamp gelesen wurde machst d folgendes
PHP:
// Script A code....
if(time() >= ($letzeAusfuehrung + 1200)) {
include "scriptB.php";
scriptB(); 
}

so kann dann keiner, oder du selber ausversehen, scriptB an an ScriptA vorbei ausführen.

hast du angst das der interpreter die maximale ausführungszeit überschreitet?
die kann man hochsetzen mit http://php.net/manual/en/function.set-time-limit.php

ggf. dann periodisch die ausführungszeit abfragen und den befehl wiederholen, siehe api

ein problem hast du so natürlich, du wirst dann nicht immer exakt alle 20 minuten da script ausführen, sondern mal nach 21, mal nach 20,5 etc.

wobei ich mich langsam frage ob PHP für deine projekte wirklich die geeignet sprache ist .... ^^"
 
Zuletzt bearbeitet:
Mercsen schrieb:
so kann dann keiner, oder du selber ausversehen, scriptB an an ScriptA vorbei ausführen.

Die liegen ausserhalb des Roots und werden nur vom CronJob gestartet.


wobei ich mich langsam frage ob PHP für deine projekte wirklich die geeignet sprache ist .... ^^"

Für manche Sachen nicht :), doch diese Sahe ist nicht für mich sonden für jemanden anders, der halt nur einen CronJob zur Verfügung und was externes möchte er nicht, deshalb will ich sehen wie ich Ihm das alles über einen mache.
 
Und auf diese Dateien kommt von außen niemand? Weil wenn man irgendwie draufkommen kann dann unbedingt in eine Funktion verpacken, dann bekommt man beim normalen öffnen einfach eine leere Seite.

Zum Cronjob:
Eine Cronjob.php machen, die möglichst oft ausgeführt wird (Minutentakt sollte mindestens möglich sein. Aber desto öfter desto besser).
Und dann per Timestamp (kannste ja in ne Datei oder Datenbank legen) prüfen wann die letzte Ausführung war. Wenn du noch keine Datenbank dafür hast, würd ich das wirklich fast in ne Datei legen.
Das ganze kannste dann soweit machen, dass du mit dieser Datei eben alle deine Cronjobs anstößt. So hast du nach außen hin nur diesen einen, aber effektiv unendlich viele.

Wie genau muss das denn sein? Oder kannste zB auch mit der Differenz seit der letzten Ausführung dann den aktuellen Wert (oder was auch immer das macht) berechnen?
 
Ne da kommt niemand ran, ausser dem Hoster natürlich :)
Es muss nicht genau sein, Hauptsache ist min. 20 Minuten Abstand, wenn das jetzt auch mal 22, 21, oder 25 sind ist auch egal.
 
Na dann langts auf jeden Fall wenn dein Cronjob-Skript einmal die Minute ausgeführt wird (das ist auch bei kostenlosen Hostern teilweiße möglich).
Und wenn niemand hinkommt, dann kannste das ganze einfach in ner andere Datei machen und die falls 20 Minuten vergangen sind mit include() einbinden.
 
Zurück
Oben