2017-01-12 2 views
1

CloudflareとPrestashopを併用してロード時間を改善していますが、CDNの副作用は最大90秒間しか実行できないということです。これ以上長いとCloudflareは524エラーを送信し、cronjobは適切に起動されません。PrestashopとCloudflareで長時間動作するCronジョブを使用する

Cloudflareによれば、この問題を回避するには2つの方法があります。私はcronjobプロセスのサイズを90秒のウィンドウ(これはオプションではありません)に収まるように縮小するか、Cloudflareが影響を与えない別のサブドメインでcronjobを実行することができます。しかし、このオプションの問題はPrestashopに何かが組み込まれているためです。サイトにアクセスするサブドメインに関係なく、メインドメインにリダイレクトされるだけです。

誰もこの種の問題に遭遇したことがありますか?その場合、問題を回避する最善の方法はありますか?ありがとう!

+0

cronによって呼び出されるファイルのコードを投稿できますか? –

+0

私はいくつかのものを持っています。 1つは、顧客データベースを取り、Eメールをメールチェンジャーにインポートするものです。これは、放棄されたカート電子メールを処理するものと、DHLおよびUPSを介した配信の進捗をチェックし、それに応じてプリstashopの注文状況を更新するものです。 – cyanoxide

答えて

0

かなりの時間の後、私はこの問題を解決することができました。私はいくつかのprestashopのコントローラを変更して、特定のサブドメインの例外を追加する必要がありました。私はshop.php(クラス/ shop/Shop.php)の370行目のif文を修正して、このように見えるようにする必要がありました( "exemption.myshop"を更新してください)。あなたのサブドメインを持つCOM」:

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

私はその後、私はsslRedirection両方の先頭に次のコードを追加する必要がfrontController.php(クラス/コントローラ/ frontController.php)に二つの機能を変更する必要がありました。および各機能の内部に他のすべての上記canonicalRedirection機能。

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

は、その後、私はメインディレクトリにキャッシュフォルダからclass_index.phpを削除し、変更が行われました。あなたはそれが訪問してきましたかどうかを確認するためにテストすることができますサブドメイン、URLを変更せずにページを読み込む必要があります。

0

すべてのホスティングには、この問題が大規模または小規模の形であります。問題は、ある時点ですべてのサーバーリソースを消費する可能性があるため、Webサーバーが単一のスレッドに未定義の処理時間を与えることができないことです。

まず、cronスクリプトが最後に実行された場所から続けることができることを確認する必要があります。これをcronが処理している場所で定期的に保存してから、プロセスが停止して再び開始すると、その場所から続けることができます。たとえば、製品を処理している場合は、最後に処理されたプロダクトID(DBまたはファイル内)を保存できます。その後、スクリプトを再度実行すると、最後に処理されたプロダクトIDから処理を続けることができます。

第2の課題は、プロセスが完全に終了するようにcronを数回実行する必要があることです。実行が完了するまでにどれぐらいのスクリプトが必要かを計算で知ることができます。たとえば、90秒の期間で30分の場合、100秒の間隔でcron 20の時間を実行する必要があります。

cronを実行するには、いくつかのオプションがあります。 - 管理用パネル構成をホストしています。 - 作動可能なシステムオプション。 - Prestashopフリーcronjobモジュール。 - 第三者サービス。

こちらがお役に立てば幸いです。

幸運。

+0

これは興味深いコンセプトですが、私が間違いなく見ていることはありますが、私はそれをどうやってやっていくのか本当に分かりません。私が使っているcronジョブの大部分は、様々なprestashopモジュールに含まれています。理想的には、モジュールを変更して動作させる必要のないソリューションを探したいと思っています。 – cyanoxide

+0

こんにちは。あなたが持っているすべてのcronの頻度と遅延を計算するサードパーティのサービスを使用してください。またはPrestashop cronjobモジュールを使用してください。可能であれば、ホストタイムアウトを増やしてください。 cronのほとんどは、終了するのに時間がかかりません。特に長い時間がかかるものを検出できれば、中断後は常に最初からスターにしてはいけません。そうでない場合は、変更する必要があります。がんばろう。 – PrestaAlba

0

ドメインリダイレクトは管理コンテキストでは実行されません。 FrontOfficeの各コントローラーは、現在のURLを確認し、必要に応じて正規のドメインにリダイレクトします(ドメインがデフォルトのものでない場合など)。しかし、このメカニズムはBackOfficeには存在しません。あなたはFrontOfficeにアクセスしようとするので、あなたがデフォルトのドメインにリダイレクトされますcron.example.com/アクセスしようとする場合は、例えばメインドメインwww.example.comとサブドメインcron.example.comを持っている場合は、

。しかし、バックオフィスのcronjobsモジュールにアクセスしようとすると、リダイレクトなしで動作しますhttp://cron.example.com/admin-1f5zef1/index.php?controller=AdminCronJobs&token=7498b7d228cc3e630ee2fe6b34bd1638

私のウェブサイトでテストされ、働いています。

+0

その場合、管理領域外のモジュールを指すリンクがあるので、どのように管理領域を介して自分のcronジョブを実行するのですか? – cyanoxide

関連する問題