php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 31-08-2010, 12:44
lx-club
 Registrierter Benutzer
Links : Onlinestatus : lx-club ist offline
Registriert seit: Nov 2003
Beiträge: 846
lx-club ist zur Zeit noch ein unbeschriebenes Blatt
Standard PHP Script per Cronjob aufrufen

Hi,

es gibt ein PHP-Script, was sich immer wieder selbst aufruft, da die Einträge in die Datenbank paketweise erledigt werden. Das Skript kann ich ja nicht per HTTP aufrufen. Wie kann ich per Cronjob trotzdem erreichen das sich das Skript erneut aufruft? Es gibt doch bestimmt auch bei einem Cronjob eine zeitliche Bschränkung wie lang ein Script läuft.
Mit Zitat antworten
  #2 (permalink)  
Alt 31-08-2010, 13:28
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Du kannst das Script per Cron entweder über einen Browser (lynx, wget, w3m, whatever) oder auf der Kommandozeile aufrufen. Crontab sähe dann so aus - Ausführung jede Minute
Code:
* * * * * /usr/bin/lynx -source http://example.com/script.php 2>&1 # Browser lynx
* * * * * /usr/bin/wget -q http://example.com/script.php 2>&1 # Downloader wget
* * * * * /usr/bin/php /path/to/docroot/script.php 2>&1 # PHP CLI
Beachte, dass bei der CLI-Variante im Script natürlich nicht die Webserver-Umgebung ($_SERVER) vorhanden ist.

Die max_execution_time kannst du im Script mit set_time_limit(0); auf unendlich setzen. Sollte dein Provider das mit SafeMode verhindern, versuch die CLI-Variante. Denn dabei ist max_execution_time standardmäßig unendlich. Sollte auch hier dein Provider ein Limit gesetzt haben und du es nicht ändern können, musst du mit ihm sprechen. Wenn er dir nicht entgegen kommt, bleibt dir nichts anderes übrig, als im Script die Arbeit in Häppchen zu unterteilen, die im Zeitlimit machbar sind.
Mit Zitat antworten
  #3 (permalink)  
Alt 31-08-2010, 13:41
lx-club
 Registrierter Benutzer
Links : Onlinestatus : lx-club ist offline
Registriert seit: Nov 2003
Beiträge: 846
lx-club ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

danke, das werd ich mir mal so einrichten.
Das ursprüngliche Skript hat sich ja mittels GET-Parameter aufgerufen. Nun läuft der Cron jede Minute. Woher weiß dann das Skript an welcher Stelle es weitermachen muss?
Mit Zitat antworten
  #4 (permalink)  
Alt 31-08-2010, 13:48
eagle275
 Registrierter Benutzer
Links : Onlinestatus : eagle275 ist offline
Registriert seit: Jun 2010
Beiträge: 403
eagle275 befindet sich auf einem aufstrebenden Ast
Standard

das wirst du dir selbst irgendwie "merken" müssen -

vielleicht über eine kleine ini-datei, die dein script beim start liest - startwert herausholt , n schritte macht , ini-datei wieder schreibt mit dem erreichten End-wert .. usw
__________________

Wer LESEN kann, ist klar im Vorteil!
Mit Zitat antworten
  #5 (permalink)  
Alt 31-08-2010, 14:02
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Wenn das Script seine Arbeit nicht in einem Rutsch erledigen kann, muss man nach den Gründen dafür unterscheiden:
a) Das Script wird wegen Zeitlimit beendet, bevor die Arbeit komplett erledigt ist.
b) Das Script braucht für die Arbeit (möglicherweise) länger als ein Cron-Intervall, wird also erneut aufgerufen bevor es fertig ist.
Theoretisch können auch beide Gründe auftreten, aber dann solltest du einfach das Cron-Intervall so hoch setzen, dass es größer als das Zeitlimit ist.

Gegen a hilft der Ansatz von eagle275. Dabei musst du aber aufpassen, dass die n Schritte wirklich noch vor Ablauf des Zeitlimits erledigt werden. Wird das Script nach n-x Schritten abgebrochen, steht in der ini-Datei noch n-n und beim nächsten Run werden die n-x Schritte erneut ausgeführt.
Da wir nicht wissen, was dein Script genau macht, kann man dazu nichts genaueres sagen. Im Prinzip könnte man sich die ini-Datei sparen, wenn das Script den letzten Stand anhand der Daten in der DB ermitteln kann. Man kann auch mit register_shutdown_function() arbeiten.

Gegen b hilft das Setzen eines Locks, z.B. auf eine Datei. Beim Start sperrt das Script die Datei und am Ende gibt es sie wieder frei. Ist die Datei bereits gesperrt, ist klar, dass gerade eine andere Instanz des Scripts läuft. In diesem Fall sollte sich das Script einfach beenden.
Mit Zitat antworten
  #6 (permalink)  
Alt 31-08-2010, 14:14
lx-club
 Registrierter Benutzer
Links : Onlinestatus : lx-club ist offline
Registriert seit: Nov 2003
Beiträge: 846
lx-club ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich lese aus einer Tabelle Daten aus und aktualisiere anhand dessen eine andere Tabelle. Da diese Aktualisierung ohne Aufteilung zu lang dauert hab ich es in Pakete zu je 100 Datensätzen aufgeteilt.
Den Stand in der DB kann ich ja eritteln indem ich mit noch ein Kennzeichen setze. Aber entweder so oder über eine Datei werd ich das machen.

Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
S: Script für DB Befehl als Cronjob chris71 Apps und PHP Script Gesuche 1 28-05-2008 15:21
[Script] Suche Script für backup mit CronJob Entenberger Apps und PHP Script Gesuche 1 29-12-2006 00:53
PHP Script als Cronjob ausführen Thomas1978 PHP Developer Forum 7 01-01-2006 14:39
PHP-Script via CronJob aufrufen merendo Linux und Unix 8 30-05-2005 23:07
[Script] Cronjob= ON/OFF Server kwalke Apps und PHP Script Gesuche 9 05-10-2004 17:31

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 02:51 Uhr.