Cronjob so oft ausführen bis Log-Datei erstellt wurde

Sundermeier

Grünschnabel
Hallo,

ich führe jeden Tag eine Aktualisierung meiner Datenbank durch. Wenn das Skript komplett durchläuft wird eine .txt Datei erstellt mit den Aktualisierungen.
Da Anzahl der Daten aber manchmal zu groß ist bekomme ich oft einen php timeout error.
Im Moment löse ich das Problem indem ich den Cronjob 3 mal hintereinander anstoße. Was zur Folge hat das ich manchmal 3 Log-Dateien habe. Falls die Daten größer werden müsste ich noch einen Cronjob erstellen. Das kann ja keine vernünftige Lösung sein.

Gibt es einen besseren Weg?
Kann man php timeout Fehler abfangen und so das Skript sich selbst noch einmal aufrufen lassen?
Oder überprüfen, ob die Log-Datei existiert, wenn nicht dann wird das Skript nochmal ausgeführt.
 
Du könntest doch nur einen Cronjob verwenden, der beispielsweise alle fünf Minuten aufgerufen wird und solange Daten in die Logdatei schreibt bis das Skript abbricht. Wenn das Skript das nächste Mal angestoßen wird, schaut es erst einmal nach, wie weit es beim letzten Aufruf gekommen ist und fängt dann dort an, wo es das letzte Mal aufgehört. Falls das Skript aber merkt, dass nichts mehr zu tun ist, dann lass es einfach sofort abbrechen.
 
Ich habe einen Zeitstempel wann die Daten das letzte mal aktualisiert wurden. Wenn die Daten vor wenger als 1h aktualisiert wurden, werden sie übersprungen.
Leider kann ich nur den Tag (bzw 1 Mal pro Tag) an dem ein Cronjob läuft festlegen. Für genaueres habe ich keine Rechte (Hosting: DomainGo Power S).
 
Könnte dieser Ansatz funktionieren?

PHP:
<?
  while(solange Log-Datei nicht existiert)
  {
    //Skript auf X Durchgänge beschränken
    for($i;$i<$ende;$i++)
    {
      echo"$i<br>";
    }
    //Skript neu starten
    echo"<META HTTP-EQUIV=\"refresh\" content=\"0;URL=cronjob.php\">";
  }
?>

Solange es noch keine Log-Datei gibt ruft das Skript sich selbst auf.
Das Skript ist dabei auf eine Anzahl Daten begrenzt die nie einen Laufzeitfehler erzeugen.
 
Du könntest versuchen, die max_execution_time hochzusetzen. Allerdings hat dein Hoster offenbar eine Beschränkung der Skriptausführungszeit.
Möglicherweise ist für dich ein anderer Hoster eine sinnvolle Lösung.
 
Zuletzt bearbeitet von einem Moderator:
Zurück