PHP Cronjob funktionsweise?

resoucer

Gesperrt
ID: 77379
L
20 April 2006
2.846
109
Hallo,

ich wollte mal was fragen.

ich habe ein PHP-Script welches ca. alle 2 Std. aufgerufen wird. Die Abarbeitungsschritte erofolgen immer in ca. 10% Schritten.

D.h. nach 10% Abarbeitung kommt ein Meta Refresh wo dann die nächsten 10% abgearbeitet werden. Grund ist das die Ausführung des Script je 10% ca. 1 Minute dauert.

Jetzt wollte ich aber nicht alle 2 Std. selber am Rechner sitzen und das im Background laufen lassen sondern das mit einem Cronjob machen lassen.

Meine Frage ist jetzt, wird das funktionieren? Arbeitet der Cronjob so das der Metarefresh auch geht?

Oder habt ihr noch ein Idee wie ich Serverseitig das ganze Script (php + js) anstoßen kann ohne jedesmal am Rechner zu sitzen?

Vielen Dank
 
auf einem Root Server gibt es ein manual (man) und damit kann man schauen wie cronjob arbeitet, wenn beim install des befehls auch die man dabei ist.
Weiss nicht mehr genau, aber es gibt mehrere Befehle.

- einer legt die Cronjobs an
- der 2te kann dir alle auflisten
- der 3te kann eingerichtete jobs löschen
...

Im manual steh alles gut beschrieben-

Wenn DU ein CONFIXX oder PLESK oder solchen ".....mist" an der Backe hast, musst Du dort über den Cronjobs Part die Dinger einstellen. Viel umständlicher aber machbar...

bei beidem ist google auch Dein Freund !
 
Es gibt auch externe Dienste im WWW die dir ein Script z.B. alle 10 Minuten aufrufen - refresh geht aber dabei nicht!

Andere Sache => einfach mal Cronjobs bei Wikipedia suchen - ist aber eine rein auf Systemebene ablaufende Sache - Browserdenken musste da völlig ausblenden!
 
du kannst als krücke das script per cron mit curl oder wget laufen lassen.

aber wenn du doch sowieso nen cron hast, lass doch das php-script laufen!?
 
Das Problem ist doch nicht die Nutzung von Cronjobs, nach der Frage von resourcer weiß er eben nicht genau was es ist, geschweige denn wie es funktioniert.


Und nein, der Cronjob kann keinen Meta-Refresh machen, das ist auch nicht sinnvoll, da es nur eine Krücke ist, die du dir gebastelt hast um es im Browser ausführen zu können.
 
mhh also ich verstehe das es mit einen Cronjob also so nicht möglich ist da halt die Refresh Sachen nicht ausgeführt werden.

Gibt es denn sonst eine Möglichkeit?

PS: Root Server ist vorhanden.
Das mit dem Timeout möchte ich ungern machen.
 
Gibt es denn sonst eine Möglichkeit?

Script umschreiben und häufiger aufrufen.

Entweder Du schreibst das Script so, dass es immer nur einen festen Teil der Arbeit macht oder dass es mit Abbrüchen klarkommt. Wichtig ist letztlich nur, dass Du den genauen Fortschritt der Abarbeitung protokollierst. Das was Du mit den 10% schriebst klingt so, als ließe sich das ganze in Teilstücke zerlegen, dann musst Du nur protokollieren welche Teilstücke erledigt sind.

Natürlich reicht es dann nicht, das Script alle 2h aufzurufen, da es dann jeweils nur ein Teilstück bearbeiten würde (10%). Meine Empfehlung wäre, die Aufruffrequenz deutlich höher zu machen. Es muss ja nicht bei jedem Aufruf tatsächlich der Job ausgeführt werden. Man kann ja auch den Zeitpunkt der letzten begonnenen Ausführung protokollieren und eine neue nur starten wenn bereits 2h vergangen sind.


Ich hatte sowas mal in Planung für ein Projekt ist aber am Ende aus Mangel an Bedarf nie umgesetzt worden: eine Tabelle in der anstehende Jobs stehen mit Zeitpunkt der nächsten Ausführung, ggf. Priorität, und aktuellem Fortschritt. Dann ein Worker-Script, was häufig aufgerufen wird (alle paar Minuten) und bei jedem Aufruf prüft ob etwas zu tun ist, sich einen Teil des anstehenden Jobs vornimmt und dessen erfolgreiche Ausführung protokolliert. Damit könnte man ziemlich viel machen.
 
Schonmal darüber nachgedacht ob ein Shell-Skript in Frage kommt oder generell eine andere Sprache dafür besser geeignet ist?
Warum kommt keine Lösung ohne Timeout in Frage? Das ganze kann man ja per nice so einstellen, dass es nicht die komplette Rechenleistung vom Server frisst.
 
...
PS: Root Server ist vorhanden.
Das mit dem Timeout möchte ich ungern machen.

nun wenn das so ist, dann solltest du wget als pakage installieren je nach distribution die du auf deinem system hast.

https://www.manpagez.com/man/5/crontab/

Da steht alles wissenswertes drauf und auch hier in deutsch nur mal zum lesen:

https://wiki.ubuntuusers.de/Cron

Du könntest dein script ohne refresh bauen und das refresh übernimmt dann der cronjob. Der cronjob selbst ruft mittels wget dein script auf und das in der angegebenen Art und Weise (Häufigkeit siehe manuel cron)!

PS: um English kommst Du hierbei nie drum herum!
 
Wenn das Skript auf dem gleichen Server liegt, braucht man doch gar kein wget. Da kann's man auch direkt aufrufen.
 
Zuletzt bearbeitet:
Wenn das Skript auf dem gleichen Server liegt, braucht's doch gar kein wget. Da kann's man auch direkt aufrufen.

sicher geht das, wenn er will, aber so kann er mittels wget auch andere sachen zeitgesteurt runterladen (webseiten durchsuchen nach bestimmten dingen etc, wenn er mit curl nicht zurande kommen sollte...)

aber das man wget nun zum aufrufen von php braucht, das muss es nicht sein. ;)
 
okay ist ein böser Trick aber du kannst via header Location refreshen und so das script immer wieder anstoßen. Und dann per wget drauf zugreifen.
Du darfst halt nur keine Ausgabe im Script haben.

Aradiv