在Prestashop和Cloudflare CDN中使用长期运行的Cron Jobs



所以我让Cloudflare和Prestashop一起运行以提高加载时间,但CDN的一个副作用是我的cronjobs最多只能运行90秒。再过一段时间,Cloudflare将发出524错误,cronjob将无法正确启动。

根据Cloudflare的说法,有两种方法可以解决这个问题。我可以缩小cronjob进程的大小,使其适合90秒的窗口(这不是一个选项),也可以在Cloudflare没有影响的单独子域上运行cronjobs。然而,这个选项的问题是Prestashop内置了一些东西,因此无论你用什么子域访问网站,它都会重定向到主域。

有人有处理这类问题的经验吗?如果有,解决这个问题的最佳方法是什么。谢谢

所有主机都有这个问题。问题是,web服务器无法为单个线程提供未定义的进程时间,因为它可能会在某个时刻消耗所有服务器资源。

首先,您必须确保您的cron脚本能够在上次执行时继续执行。您可以在cron正在处理的地方定期进行保存,然后当进程停止并再次启动时,它可以在离开的地方继续。例如:如果你正在处理产品,你可以保存最后处理的产品ID(在你的数据库或文件中),然后当你再次执行脚本时,它可以从最后处理的商品ID继续。

第二个主题是,您必须多次执行cron,以确保流程完全完成。您可以计算脚本完成执行所需的完整时间。例如:以90秒为周期的30分钟,然后您必须以100秒的间隔执行您的cron 20次。

要执行cron,您有一些选项:-主机管理面板配置。-操作系统选项。-Prestashop免费cronjob模块。-第三方服务。

我希望这能帮助你。

祝你好运。

域重定向不是在管理上下文中完成的。FrontOffice上的每个控制器都会检查当前URL,并在需要时重定向到规范的URL(例如,如果域不是默认的)。但这种机制在后台并不存在。

然后,如果您有一个主域www.example.com和一个子域cron.example.com,如果您尝试访问cron.example.com/,您将被重定向到默认域,因为您尝试访问FrontOffice。但是,如果您尝试在后台访问cronjobs模块,它将在没有重定向http://cron.example.com/admin-1f5zef1/index.php?controller=AdminCronJobs&token=7498b7d228cc3e630ee2fe6b34bd1638的情况下工作。

在我的网站上测试和工作。

所以经过一段时间后,我设法解决了这个问题。我不得不修改一些prestashop的控制器,为我的特定子域添加一个例外。我需要修改shop.php(classes/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') {

然后我不得不修改frontController.php中的两个函数(classes/controllers/frontControllerphp)。

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

然后,我从主目录的缓存文件夹中删除了class_index.php,并进行了更改。你可以通过访问子域来测试它是否有效,它应该在不更改url的情况下加载页面。

相关内容

  • 没有找到相关文章

最新更新