2017-01-12 2 views
1

So habe ich Cloudflare und Prestashop laufen zusammen, um Ladezeiten zu verbessern, aber eine Nebenwirkung der CDN ist, dass meine Cronjobs nur für maximal 90 Sekunden laufen können. Noch länger und Cloudflare sendet einen 524 Fehler und der Cronjob wird nicht korrekt gestartet.Verwenden langer Cron-Jobs mit Prestashop und Cloudflare CDN

Laut Cloudflare gibt es zwei Möglichkeiten, um dieses Problem zu umgehen. Ich kann entweder die Größe des Cronjob-Prozesses reduzieren, so dass er in das 90-Sekunden-Fenster passt (was keine Option ist), oder ich kann die Cronjobs auf einer separaten Subdomain ausführen, auf die Cloudflare keinen Einfluss hat. Das Problem mit dieser Option ist jedoch, dass Prestashop etwas eingebaut hat, so dass unabhängig davon, welche Subdomain Sie verwenden, um die Website zu besuchen, es einfach auf die Hauptdomain umgeleitet wird.

Hat jemand Erfahrung mit dieser Art von Problem und wenn ja, was sind die besten Methoden, um das Problem zu umgehen. Vielen Dank!

+0

können Sie den Code der Datei, die vom Cron aufgerufen wird, posten? –

+0

Ich habe mehrere verschiedene. Eines, das die Kundendatenbank übernimmt und E-Mails nach mailchimp importiert, eines, das aufgegebene Einkaufswagen-E-Mails verarbeitet, und eines, das den Lieferfortschritt über DHL und UPS prüft und den Bestellstatus in Prestashop entsprechend aktualisiert. – cyanoxide

Antwort

0

So nach einiger Zeit konnte ich dieses Problem beheben. Ich musste einige Controller von Prestashop modifizieren, um eine Ausnahme für meine spezielle Subdomain hinzuzufügen. Ich musste eine if-Anweisung in Zeile 370 von shop.php (classes/shop/Shop.php) ändern, so dass es so aussieht (stelle sicher, dass du "expectation.myshop" aktualisierst).com“mit Ihrer Sub-Domain.

if ((!$id_shop && defined('_PS_ADMIN_DIR_')) || Tools::isPHPCLI() || in_array($http_host, $all_media) || $http_host == 'exemption.myshop.com') { 

Ich hatte dann zwei Funktionen in frontController.php (Klassen/controllers/frontController.php) zu ändern brauchte ich das folgende Stück Code an die Spitze sowohl der sslRedirection hinzufügen und canonicalRedirection Funktionen über alles andere innerhalb jeder der Funktionen.

 if (Tools::getHttpHost() == 'exemption.myshop.com'){ 
     return; 
    } 

Dann löschte ich class_index.php aus dem Cache-Ordner auf dem Hauptverzeichnis und die Änderungen vorgenommen wurden. Sie können testen, um zu sehen, ob es funktioniert hat durch den Besuch Die Subdomain sollte die Seite laden, ohne die URL zu ändern.

0

Alle Hosting haben dieses Problem in Haupt- oder Nebenform. Das Problem ist, dass ein Web-Server einem einzelnen Thread keine undefinierte Prozesszeit geben kann, da er an einem bestimmten Punkt alle Serverressourcen verbrauchen kann.

Als Erstes müssen Sie sicher sein, dass Ihr Cron-Skript die Möglichkeit hat, dort fortzufahren, wo es die letzte Ausführung verlassen hat. Sie können das Speichern in regelmäßigen Abständen durchführen, wenn der Cron gerade verarbeitet wird. Wenn der Prozess gestoppt und erneut gestartet wird, kann er dort fortgesetzt werden, wo er geblieben ist. Beispiel: Wenn Sie Produkte verarbeiten, können Sie die letzte verarbeitete Produkt-ID (in Ihrer Datenbank oder einer Datei) speichern. Wenn Sie das Skript erneut ausführen, können Sie mit der letzten verarbeiteten Produkt-ID fortfahren.

Das zweite Thema ist, dass Sie cron mehrere Male ausführen müssen, um sicherzustellen, dass dieser Prozess vollständig abgeschlossen ist. Sie können berechnen, wie viel Skript vollständig benötigt wird, um die Ausführung zu beenden. Zum Beispiel: 30 Minuten in Intervallen von 90 Sekunden, dann müssen Sie Ihre Cron 20 Zeit mit 100 Sekunden Intervall ausführen.

Zum Ausführen von Cron haben Sie einige Optionen: - Hosting-Admin-Panel-Konfiguration. - Operative Systemoptionen. - Prestashop kostenloses Cronjob Modul. - Drittanbieter-Service.

Ich hoffe, das kann Ihnen helfen.

Viel Glück.

+0

Das ist ein interessantes Konzept und etwas, auf das ich definitiv schauen werde, aber ich bin nicht wirklich sicher, wie ich das machen soll. Die meisten Cron-Jobs, die ich verwende, sind in verschiedenen Prestashop-Modulen enthalten. Idealerweise möchte ich eine Lösung finden, bei der ich die Module nicht modifizieren muss, damit sie funktioniert. – cyanoxide

+0

Hallo. Verwenden Sie die Berechnungshäufigkeit und -verzögerung eines Drittanbieters für jeden Cron, den Sie haben. Oder benutzen Sie einfach das Prestashop Cronjob-Modul. Erhöhen Sie Ihr Hosting-Timeout, wenn Sie können. Die meisten Crons sollten nicht lange dauern. Wenn Sie feststellen können, welche besonders lange dauern, sollte es nicht möglich sein, immer von Anfang an nach der Unterbrechung zu beginnen. Wenn nicht, sollten Sie es ändern. Viel Glück. – PrestaAlba

0

Die Domänenumleitung wird nicht im Administratorkontext durchgeführt. Jeder Controller in FrontOffice prüft die aktuelle URL und leitet sie bei Bedarf an die kanonische Adresse weiter (wenn die Domain nicht die Standard-URL ist). Aber dieser Mechanismus existiert nicht auf dem BackOffice.

Dann, wenn Sie zum Beispiel eine Hauptdomain www.example.com und eine Sub-Domain cron.example.com, wenn Sie versuchen, cron.example.com/ zugreifen, die Sie auf die Standarddomäne weitergeleitet werden, da Sie versuchen, die Frontoffice zuzugreifen. Aber wenn Sie versuchen, auf das Cronjobs-Modul im Backoffice zuzugreifen, funktioniert es ohne Umleitung http://cron.example.com/admin-1f5zef1/index.php?controller=AdminCronJobs&token=7498b7d228cc3e630ee2fe6b34bd1638.

Getestet und funktioniert auf meiner Website.

+0

Wie würde ich dann meine Cronjobs über den Admin-Bereich ausführen, da sie alle Links enthalten, die auf Module außerhalb des Admin-Bereichs verweisen? – cyanoxide