errox Geschrieben 15. Februar 2014 Geschrieben 15. Februar 2014 Hallo Liebe Community, ich habe ein Problem, wo ich wahrscheinlich ich nicht der erste bin. Zum Script: Es ist ein Tool, dass Daten von einer MySQL Datenbank, in eine Oracle, MSSQL oder eine andere Datenbank hin / her schaufelt. Das klappt soweit ganz gut. Das Script läuft je nach Kunde unter einem Mac, Linux oder auch einem Windows Rechner. Es geht darum, dass das Script nicht mehrfach laufen darf. Sondern nur einmal gestartet werden soll. Als wir nur Linux Kunden hatten, haben wir es in der .sh eingestellt. Da geht das Relativ einfach. Jedoch haben wir nun auch Kunden, wo der Cronjob direkt über http aufgerufen wird. Oder auch Windows / Mac Kunden, wo das nicht so einfach ist. Da ich da flexibel sein möchte, soll die gesamte Logik im PHP Script implementiert werden. Ganz Primitiv gesagt: 1. Ich Prüfe ob es eine "isrunning.txt" gibt. Existiert diese, breche ich das Script ab 2. Ich lege eine "isrunning.txt" an 3. Führe meine Funktionen aus 4. Lösche die "isrunning.txt", dass das Script wieder ausgeführt werden kann. Wir haben auch bereits Workarounds, dass der Cronjob einfach eine höhere Laufzeit bekommt. Jedoch ist dass nicht das Ziel, dass es in Echtzeit läuft. Wenn in Punkt 3 (Funktionen vom Cronjob) ausgeführt werden, wird einfach ein try / catch drum herum gemacht, so das falls ein Fehler passiert, das nicht von einem Neustart abhält. Wovor ich angst habe, ist ein Timeout vom Server. Das ist das Hauptproblem was ich habe. Was kann ich da tun? Wie kriege ich das mit? Was gibt es noch für Methoden / Dinge die ich beachten muss? Vielen Dank / Liebe Grüße errox
Der Kleine Geschrieben 15. Februar 2014 Geschrieben 15. Februar 2014 Den Zeitstempel der Datei abfragen, und wenn die Datei länger als 1 Stunde / 1 Tag / 1 Woche ist, dann einfach so tun, als ob diese nicht da wäre.
uenetz Geschrieben 17. Februar 2014 Geschrieben 17. Februar 2014 Servus! Ich würde mit der PID arbeiten. Mittels int getmypid ( void ) abfragen, und diese dann in myscript.pid schreiben. Danach kannst Du bei jedem Scriptstart die PID in myscript.pid mit der aktuellen PID validieren und ggf. demnach auch reagieren. Viel Erfolg!
pr0gg3r Geschrieben 17. Februar 2014 Geschrieben 17. Februar 2014 (bearbeitet) Ich würde mir einfach mal LOCK TABLES ansehen, bevor irgendwie ein Workaround dafür geschaffen wird /Edit: ich weiß ja nicht, ob die Tabelle "gepserrt" werden soll, könnte aber Sinn machen bei einer Synchronisation. Bearbeitet 17. Februar 2014 von pr0gg3r
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden