用于高负载多站点网络的 WordPress Multisite Cron

这篇具有很好参考价值的文章主要介绍了用于高负载多站点网络的 WordPress Multisite Cron。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在易服客建站平台创建免费网站

500M免费空间,可升级为10GB电子商务网站

创建免费网站

用于高负载多站点网络的 WordPress Multisite Cron

发布于 2023年3月18日

你也许知道WordPress 内置 CRON 的工作方式与传统 CRON 不同。

它不是在指定时间触发,而是仅在有人访问该网站时触发。因此,如果没有访问,则不会触发 wp-cron,因此不会执行任何任务。

反之亦然,如果您在您的网站上吸引了大量访问者,则每次有人查看任何页面并检查计划任务时,WordPress CRON 系统都会被触发。这样 WordPress CRON 会导致额外的服务器负载(CPU 使用率增加),这可能会严重损害网站性能。

当谈到 WordPress Multisite Cron时,您的问题会随着安装的网站数量而增加。

用于高负载多站点网络的 WordPress Multisite Cron

目录 隐藏

wp-cron 是如何工作的? 

如何为 WordPress Multisite 设置 CRON 作业并修复跨网络的延迟计划问题? 

一个明显的方法 

更好的方法 

我为高负载 WordPress 多站点网络设置 CRON 的方法 

wp-cron 是如何工作的?

Multisite 上的 WordPress CRON 在每个博客上独立工作。

比如说,您在网站 A 和 B 上安排了帖子。

当有人访问网站 A 时,博客 A 上的预定帖子虽然有延迟,但最终会发布。但是网站 B 上的帖子永远不会发布,除非有人也访问网站 B。

错过网络每个站点的计划问题可能是一件相当烦人的事情。当您在多站点安装中获得大量流量时,您可能会遇到另一个问题。

根据网络中网站的数量,CPU 使用率问题也会成倍增加。这就是为什么多站点使用内置 CRON根本不是一个好主意。相反,我们应该设置一个真正的 CRON 作业。

如何为 WordPress Multisite 设置 CRON 作业并修复跨网络的延迟计划问题?

一个明显的方法

为了降低 CPU 使用率并让任务执行,无论博客是否有点击,我们应该用真正的 CRON 替换 WordPress Multisite CRON。

在这里,我详细描述了如何为单个安装执行此操作。

Multisite 的步骤非常相似,除了我们需要在网络的每个站点上触发 CRON(因为它们是独立工作的)。

1. 在整个网络中禁用 WordPress CRON  wp-config.php

define('DISABLE_WP_CRON', true);

2. 我们将借助foreach循环触发每个站点的发布。

trigger.php在您拥有wp-config.php.
我有一个很棒的包装器,可以在 WordPress Multisite 中执行批量操作,这为我节省了大量时间。让它也为你工作:

if ( is_multisite()) {
$sites=get_sites();
foreach ($sitesas$site ) {
$blog_id=$site->blog_id;
//if ($blog_id < 6 ){ //if we need just certain blogs
switch_to_blog( $blog_id );
wp_suspend_cache_addition(true);
//here’s what we’re gonna do…
wp_suspend_cache_addition(false);
restore_current_blog();
//} //endif $blog_id
sleep(3); // this should be paused for 3 seconds before every other blog
}//endforeach
}//endif multisite

所以我们只需将这段代码放在该行之后//here's what we're gonna do...

$site_url = get_site_url($blog_id); $command = $site_url.'/wp-cron.php?doing_wp_cron'; wp_remote_get($command); 

它将自动触发我们网络的每个站点。

整个trigger.php看起来像这样:

if ( is_multisite()) {
$sites = get_sites();
foreach ($sites as $site ) {
$blog_id = $site->blog_id;
//if ($blog_id < 6 ){ //if we need just certain blogs
switch_to_blog( $blog_id );
wp_suspend_cache_addition(true);
//here’s what we’re gonna do…
$site_url = get_site_url($blog_id);
$command = $site_url.’/wp-cron.php?doing_wp_cron’;
wp_remote_get( $command );
wp_suspend_cache_addition(false);
restore_current_blog();
//} //endif $blog_id
sleep(3); // this should be paused for 3 seconds before every other blog
}//endforeach
}//endif multisite

3. 您现在所需要的只是在您的服务器上为您的主博客添加一个CRON 作业:

wget -O /dev/null https://network-main-blog.com/trigger.php

另外,我要设置一个合理的时间间隔。

根据指定的周期(例如每天一次),Unix CRON 将命中trigger.php -> 将命中wp-cron.php网络中的每个博客 -> 将检查是否有任何计划的任务,并执行它们。

这是在 WordPress 多站点安装上设置计划任务的充分且清晰的方法。

但是,如果您拥有相当大的网络并且服务器资源紧张,您会怎么做?

更好的方法

WordPress 中的所有计划任务都存储在wp_options表中。

当您安排一个任务每天发布 50 个草稿时,50 个任务将保存在您的 wp_options 表中。此表的大部分(包括 CRON 作业)在每次页面加载时加载。这对于单个安装来说没问题,但它会显着降低您在 WordPress 多站点网络上的站点速度。

比如说,您有一个由 100 个站点组成的中型网络,这导致我们在wp_options表中增加了 50*100=5000 行(请注意,这是同一个数据库!)。此外,您的网络访问次数越多,服务器资源消耗就越多。

为了晚上安然入睡而不用担心您的 MySQL 服务器随时崩溃,我们希望跳过 WordPress cron。 我们将设置一个 CRON 作业来直接发布帖子,而不是用于发布计划帖子的 CRON 作业。

此外,我将提供有关如何安排的详细说明,但在您继续之前,请记住这种方法可能并不适合每个项目。例如,如果特定的发布时间对您来说非常重要,那么这不是您想要做的。

但是如果你有高负载网络并且你需要每天发布草稿,节省服务器资源并且不介意发布时间是 +- 几个小时,你绝对应该尝试一下。

1. 首先,我们需要能够实际发布 50 份草稿的函数。

在WordPress根目录下创建publishing.php内容如下:

if (!defined(‘ABSPATH’)) {require_once(dirname( __FILE__ ) . ‘/wp-load.php’);}
global $wpdb;
$blog_id = get_current_blog_id();
$args = array(‘post_type’ => ‘post’, ‘post_status’ => ‘draft’ , ‘numberposts’ => 50, ‘fields’ => ‘ids’);
$future_posts = get_posts( $args );
foreach ($future_posts as $future_post) {
$my_post = array(‘ID’ => $future_post, ‘post_status’ => ‘publish’);
$upd = wp_update_post( $my_post, true );
}

这段简单的代码将直接发布草稿,无需计划。

2. 现在我们需要触发它publishing.php以在整个网络中执行。我们正在用服务器 CRON 替换 WP CRON,就像我们在上一个选项中所做的一样。

只是注意的地方是 publishing.php ,而不是wp-cron.php?doing_wp_cron

$command = $site_url.'/publishing.php';

瞧!我们通过在网络上用真正的 CRON 作业替换 WP Multisite CRON 并完全跳过了调度计划,设法减少了 CPU 和内存使用。很酷,是吗?

但…

正如我已经说过的,对于小型网络,这种方法非常好,但如果您有 100 多个博客,这意味着发布功能将一次执行 50*100 = 5000 次。这将减慢网站速度,对吧?

我为高负载 WordPress 多站点网络设置 CRON 的方法

如何在 100 多个博客上每天发布 50 篇文章而不至使您的服务器崩溃?

概述:由 100 多个博客组成的 WordPress 多站点网络。每个博客每天应该发布 50 篇文章。它导致我们每天应该由 CRON 发布 50*100=5000 个帖子。

目标:应该以最小的服务器负载执行,因为网络在发布过程中是分开加载的。

在这里,我使用另一种可以显着降低 CPU 使用率的方法。这样我们就有了:

  • 没有 CRON 事件来计划发布帖子
  • 没有发布 50 个帖子的 CRON 事件
  • CRON 在网络的每个网站上每天触发一次 (!)
  • 批量发布不会超载,一次仅发布 50 个帖子

这种方法对于开发人员来说可能有些棘手,但这是我们使用尽可能少的服务器资源的方式。

我们将为网络中的每个网站添加一个单独的 CRON 作业,并为其提供直接执行的命令  publishing.php 。

我们已经准备好这个文件,现在我们需要为网络中的每个站点添加一个单独的 CRON 作业。

每个 cronjob 应该以 1 分钟的间隔安排。想象一下,您的网络中有 3 个站点,因此 CRON 作业应该像这样执行:

站点 A — 00:01

站点 B — 00:02

站点 C — 00:03

每个人每天在准确的时间执行一次。

这样一分钟内只有一个站点被触发,没有超载,没有问题。

因此,您需要将 3 个命令添加到您的 crontab:

wget -O /dev/null http://siteA.com/publishing.php
wget -O /dev/null http://siteB.com/publishing.php
wget -O /dev/null http://siteC.com/publishing.php

在网络中有 100 多个站点! 你要我手动添加 100 多个 cronjobs 吗?

当然,不是!你可以用Linux 中的 Cron 作业批量调度实现。文章来源地址https://www.toymoban.com/news/detail-432158.html

到了这里,关于用于高负载多站点网络的 WordPress Multisite Cron的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WordPress 提示“此站点遇到了致命错误”的解决方法

    WordPress 提示“此站点遇到了致命错误”的解决方法 WordPress 网站博客提示“此站点遇到了致命错误。”如何解决?今天老唐不幸遇到了这个问题,搜了一下解决方法,发现致命错误原因有很多,所以需要先打开 WordPress 的 WP_DEBUG 功能,然后根据提示进行下一步操作。WordPress

    2024年02月09日
    浏览(62)
  • WordPress站点成功升级后的介绍页地址是什么?

    我们一般在WordPress站点后台 仪表盘 更新中成功升级WordPress的话,最后打开的就是升级之后的版本介绍页。比如boke112百科前两天升级到WordPress 6.4.2后显示的介绍页如下图所示: 该介绍除了介绍当前版本修复了多少个问题及修补了多少漏洞外,还能看到贡献者(在鸣谢中)、您

    2024年02月19日
    浏览(36)
  • 如何禁用WordPress站点的管理员电子邮件验证或修改检查频率?

    今天boke112百科登录某个WordPress站点时,又出现“管理员邮件确认”的提示,要求确认此站点的管理员电子邮箱地址是否仍然正确。具体如下图所示: 如果点击“稍后提醒我”,那么管理员邮件验证页面就会在3天后重新显示。 说实话,这个管理员邮件验证页面挺烦人的,虽然

    2024年01月18日
    浏览(58)
  • WordPress站点如何实现发布文章即主动推送到百度快速收录和普通收录?

    我们在WordPress后台成功发布文章之后,如果靠搜索引擎来抓取的话,可能会比较慢,所以十分有必要将我们成功发布的文章马上提交到百度、必应等搜索引擎中。下面boke112百科就跟大家说一说WordPress站点如何实现发布文章即主动推送到百度快速收录和普通收录,具体操作如下

    2024年02月20日
    浏览(89)
  • 【故障公告】博客站点一台阿里云负载均衡被DDoS攻击

    13:06 收到阿里云的电话与邮件通知,博客站点的一台阿里云负载均衡因 DDoS 攻击被关进黑洞(所有访问被屏蔽),部分用户的访问受影响,由此给您带来麻烦,请您谅解。 您的IP:x.x.x.x 实例名称:yyyy 受到攻击,攻击流量已超过DDoS基础防护的黑洞阈值,服务器的所有公网访问

    2024年02月05日
    浏览(35)
  • 【网络安全】记一次网站站点渗透

    前言 遇到一个站,后端是 Node.js 写的,对于这种类型的站点,一般比较难 getshell,但也实现了最终的目标,拿到后台权限 信息搜集 先进行常规的信息搜集,子域名扫描、端口扫描、目录扫描等 这个站后端脚本语言是 Node.js 目录探测发现 404 界面也极像 Node.js 的 404 页面,后

    2024年02月11日
    浏览(50)
  • AWS区域、可用区和边缘网络站点

    AWS Cloud 现已在全球 30 个地理区域内运营着 96 个可用区,并宣布计划在澳大利亚、加拿大、以色列、新西兰和泰国新增 15 个可用区和 5 个 AWS 区域。   区域(Region) 每一个AWS区域为一个独立的地理区域,可最大程度地实现容错和稳定性。不同区域里面的资源(EC2,S3,EBS 等

    2023年04月08日
    浏览(36)
  • 高校 Web 站点网络安全面临的主要的威胁

    校园网 Web 站点的主要安全威胁来源于计算机病毒、内部用户恶意攻击和 破坏、内部用户非恶意的错误操作和网络黑客入侵等。 2.1 计算机病毒 计算机病毒是指编制者在计算机程序中插入的破坏计算机功能或者数据, 影响计算机使用并且能够自我复制的一组计算机指令或者程

    2024年02月10日
    浏览(49)
  • 【网络教程】如何快速的解决WordPress“另一更新正在进行”的问题

    当我们在更新WordPress的插件或者升级WordPress时会出现后台提示 “另一更新正在进行” ,如下图 当我们点击更新后,出现下图提示 出现上述问题 是由于在升级Wordpress时,Wordpress会在数据库wp_options表中增加core_updater.lock记录。如中途打断Wordpress升级,这个记录会留在数据库中

    2024年02月15日
    浏览(40)
  • 网络安全测试中的跨站点脚本攻击(XSS):Python和FlaskSecurity实现跨站脚本攻击测试

    作者:禅与计算机程序设计艺术 引言 1.1. 背景介绍 跨站点脚本攻击(XSS)是一种常见的网络安全漏洞,攻击者通过在受害者的浏览器上执行自己的脚本代码,窃取、修改用户的敏感信息。随着互联网的发展,跨站点脚本攻击在各类应用中愈发普遍。为了提高网络安全水平,

    2024年02月07日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包