Cronjobs: alle 61 Minuten

axlex

Gesperrt
11 Mai 2009
149
2
Ich suche einen Cronjob Anbieter oder Privat Leute, die mir für Maximal drei Euro pro Monat 12 Cronjobs zur verfügung stellen, die alle 61 Minuten Aufrufen, wen das überhaupt möglich ist.

Bei cronjob.de etc ist dies nicht möglich da sie nur per Auwahliste (also maximal alle 60 minuten) die Cronjobs erstellen lassen. Der Cronjob sollte auch auf externe Server aufrufen können, wen nicht, nicht ganz sooo schlimm.
 
Alle 61 minuten wird Technisch schwierig sein, da sich somit der Cron in der Zeit immer verschiebt.

Mit Cronjobs lassen sich nur Fixe sachen ausführen.

Was genau willste den mit 61 minuten?

mfg X Future Media
 
Es muss sich halt verschieben da das Script was ich aufrufen möchte dies nur alle 60 Minuten zulässt. Da ein Cron-job sich auch mal um Sekunden verspäten kann könnte es sein das dieser erst 13:00:30 UHR aufruft. Beim nächsten mal aber rechtzeitig aufruft also 14:00:00 UHR und das Script somit, da die 60 min noch nicht voll abgewartet sind, dies Blockt. Alle 5 Minuten Aufzurufen wäre ein wenig unschön.

Hab schon die beiden Befehle versucht (nachdem ich diesen Topic erstellt habe ^^):
*/1 */1 * * *
und
*/61 * * * *

gehen anscheint beide nicht. Die einzige möglichkeit, die ich jetzt noch sehe ist es, die Cronjob nach jedem Aufruf per System um zu Programmieren allerdings ist das genau so unelegant wie die 5 Minuten Theorie.
 
Für 61 Minuten musst du das kgV(61, Anzahl Minuten pro Jahr) benutzen und dann einige Aufrufe überspringen.

Da 61 prim ist, ist jedes kgV(61, x) = 1. Das bedeutet, die einzige Möglichkeit wäre es, per Cronjob jede Minute ein Script starten zu lassen, was aber nur jedes 61ste Mal deinen Code ausführt.

Ob sich das wegen der einen Minute rentiert... :LOL:


Eine andere Theorie: Du sagst, dein Script lässt sich nur alle 60 Minuten aufrufen? Du kannst doch den Cronjob auch auf 60 Minuten einstellen. Und um das "so exakt is der Cron nun auch nicht" auszugleichen, gehst du zu Beginn mal mit
PHP:
sleep(60);
ne Minute schlafen.
Im Extremfall, sollte sich das wirklich auf ein 61-Minuten-Intervall verschieben, funktioniert das aber auch nicht, weil du nicht ewig schlafen kannst.
 
Eine andere Theorie: Du sagst, dein Script lässt sich nur alle 60 Minuten aufrufen? Du kannst doch den Cronjob auch auf 60 Minuten einstellen. Und um das "so exakt is der Cron nun auch nicht" auszugleichen, gehst du zu Beginn mal mit
PHP:
sleep(60);
ne Minute schlafen.
Was bringt das, wenn der Cron alle 60 Min jedesmal 1 Min später ausgeführt wird? Dann kann man ihn gleich eine Minute später starten, weil das keinerlei "Ungenauigkeit" ausgleicht, sondern nur nach hinten verschiebt (konstant).
 
ne die Idee war super nur nicht zu ende gedacht :mrgreen:

Das erste mal loggst du einfach wann genau der Cron ausgeführt wurde (in der db/txt/o.ä.)
beim 2. Mal fragst du ab ob schon 3600 Sekunden vergangen sind wenn nicht Restzeit mit sleep() "überbrücken" und danach dein Script starten anschließend die Zeit wieder loggen und das Spiel startet von vorne.

Nur wird der sleep immer länger werden also würde ich vorschlagen 1x pro Tag oder so den sleep zu übergehen (wirst du einen Aufruf am Tag "zu früh" verkraften können?)

Falls du einen rootserver hast könntest du auch mit einem PHP Script den alten Cron löschen und einen neuen setzten (+1std von jetzt Zeit). Hab ich noch nie gemacht aber dürfte bestimmt auch gehen confixx kann es ja z.b. auch. Bei einem normalen Webspace sollte dies aber wohl nicht gehen. Nur aufpassen das sich dein Script nicht irgendwo verrennt ist immer etwas gefährlich wenn sich ein Script selbst aufruft :ugly:

mfg

Chris
 
Nur wird der sleep immer länger werden also würde ich vorschlagen 1x pro Tag oder so den sleep zu übergehen (wirst du einen Aufruf am Tag "zu früh" verkraften können?)
Naja, das ließe sich ja auch lösen durch ein
wenn $warteZeit >= 3600sek dann
$neueWarteZeit = $warteZeit - 3600sek
BeendeScriptausführung()
// da Seite erst kürzlich aufgerufen wurde, durch die alte Wartezeit (~3600sek)
 
Ich frage mal ganz blöd, weil die Frage noch nicht da ist.
Wieso schreibst du das Script dann nicht auf 59 min um!? So das du im Stundenintervall abrufen kannst!?
 
Also mir sind Reloadsperren bisher nur aus dem Paid4berreich bekannt.

z.b. Besuchertausch, Forced Klicks, etc.

Ich hoffe nicht, das dabei irgendeine Reloadsperre genutzt werden soll. z.b. bei High-Forced Bannern mit ner Reload von genau 60 minuten, würde sich das ganze sogar lohnen umzusetzen, wäre aber Betrug.

Es würde vielleicht weiterhelfen, wenn du uns mitteilst, was du damit umsetzen willst, also welcher Zweck, eventuell gibt es ja andere möglichkeiten.

mfg X Future Media
 
was passiert denn wenn der cron zu früh ausgeführt wird? nichts?

ansonsten lass bei cronjob den cron jede 5min ausführen.
wird dann zwar nicht genau jede 60mins sein, aber auf die paar mins sollte es ja nicht ankommen.
wäre jedenfalls ohne großen aufwand verbunden^^

grüße
 
könnte man nicht einfach nach Ausführung des Scripts am Ende mit "AT now +60 minutes script.sh" das Script wieder einplanen? Dann ist völlig egal, wann und wie lange es läuft, am Ende wird es für "in 60 Minuten" wieder eingeplant.

Marty
 
oh, den thread ja völlig vergessen ^^

Nun, letztendlich habe ich mich für die Methode entschieden wie theHacker gesagt hat. Jeder Minute aufrufen und Prüfen ob bereits 3600 Sekunden seit dem Letzten aktiven aufruf vergangen sind. Bei FALSE, einfach nichts machen bei TRUE dann eben per PHP Weiterleitung auf das externe Script zugreifen (das ich ja nicht umprogrammieren kann@COOLover).

@XFuture-Media.de
na ob das so einfach wäre zu Programmieren? Ist jedenfalls nur ein einfach Datenbank backupscript auf einer externen DB die es halt nicht mag, alle 5 Minuten per Cronjob gefragt zu werden ob nun bereits 60 Minuten um sind.

es ging auch mehr um die Theorie ich versuche alle Fragen zu klären die ich nicht sofort gelöst bekomme. Falls ich das nächstemal auf dieses Problem stoße habe ich eine Lösung parat ^^