标签: WP-Cron

  • 如何创建和修改WordPress定时任务

    如何创建和修改WordPress定时任务

    Cron是一个Unix/Linux实用程序,通常用于在后台运行的Web服务器上安排命令或脚本。Cron作业是任务本身,它用于在定期的固定时间、日期或间隔安排任务。通常,这些涉及重复的任务,这些任务是自动化的以节省时间。在WordPress中,这是由WP-Cron处理的,它用于模拟系统cron。

    WordPress的cron作业的一些示例可能涉及安排要发布的文章或按预定义的时间表运行的备份插件。今天我们将深入探讨如何轻松创建、修改和运行WordPress的cron定时作业。

    如何设置WordPress Cron作业

    需要注意的是,WP-Cron与系统cron略有不同,它们各有优缺点。例如,WP-Cron完全依赖于时间间隔,而系统cron依赖于特定时间。WP-Cron也仅在页面加载时(后端或前端)有效,这可能不太可靠。WordPress提供的默认时间间隔是每小时、每天两次和每天。

    要安排WP-Cron事件,您必须创建自定义钩子。我们建议您查看官方WordPress插件手册,其中有关于安排WP Cron事件的惊人指南。如果您正在寻找使用WordPress设置系统cron的替代方法,我们建议您查看Tom Mcfarlin关于定义WordPress cron作业的文章。对于那些可能不那么先进的人,我们将探索如何轻松使用 WP-Cron以及流行的免费WP Crontrol插件。这使您可以查看和控制WP-Cron系统中发生的事情。

    WordPress插件-WP Control

    WordPress插件-WP Control

    WP Crontrol拥有超过80,000次的活跃安装,WordPress社区中的许多人都非常喜欢这个插件。

    这个插件超级好用。显示应该运行哪些CRON作业,这是了解正在发生的事情以及它是否有效的很好的第一步。此外,您可以创建新的cron作业并触发现有的运行。— Josh,Caldera Forms的创建者

    您可以从WordPress插件库下载它,也可以在WordPress仪表盘中的“安装插件”插件下搜索它。WP Control的功能包括:

    • 能够查看所有cron事件及其参数、重复和下次运行时间。
    • 编辑、删除并立即运行任何cron事件。
    • 添加新的cron事件。
    • 添加、编辑和删除自定义cron计划。

    WP-Cron计划

    激活后,您可以在WordPress仪表盘设置中的“Cron Schedules”下更改WordPress Cron作业计划。请注意,该插件添加了一个额外的每周默认时间表。您还可以以秒为单位添加其他计划,例如每6小时21600秒。

    WP-Cron时间表

    WP-Cron时间表

    这些间隔也可以使用过滤器与代码一起添加,例如:

    add_filter( ‘cron_schedules’, ‘example_add_cron_interval’ );
    function example_add_cron_interval( $schedules ) {
    $schedules[‘five_seconds’] = array(
    ‘interval’ => 5,
    ‘display’ => esc_html__( ‘Every Five Seconds’ ),
    );
    return $schedules;
    }
    add_filter( ‘cron_schedules’, ‘example_add_cron_interval’ );
    function example_add_cron_interval( $schedules ) {
    $schedules[‘five_seconds’] = array(
    ‘interval’ => 5,
    ‘display’ => esc_html__( ‘Every Five Seconds’ ),
    );
    return $schedules;
    }
    add_filter( 'cron_schedules', 'example_add_cron_interval' );
    function example_add_cron_interval( $schedules ) {
    $schedules['five_seconds'] = array(
    'interval' => 5,
    'display' => esc_html__( 'Every Five Seconds' ),
    );
    return $schedules;
    }

    WP-Cron事件

    然后,您还可以使用该插件查看您当前已安排的WordPress Cron作业。在“工具”下单击“Cron Events”。许多动作名称很容易识别,因为它们应该与插件名称的一部分相匹配,例如“woocoomerce_cleanup_sessions”或“gravityforms_cron”。

    WP-Cron事件

    WP-Cron事件

    您只需单击操作名称旁边的“立即运行”即可立即运行Cron事件。这在排除故障时会很有帮助,因为您可能需要多次运行Cron事件。

    如何创建和修改WordPress定时任务-1

    成功执行cron事件

    修改Cron事件

    您还可以通过单击操作名称旁边的“Edit”来编辑现有的Cron事件。然后,您可以更改操作名称、参数、下一次运行和计划的重复。请注意这一点,因为许多插件依赖于它们的Cron作业才能正常运行。

    修改Cron事件

    修改Cron事件

    添加Cron事件

    您还可以添加Cron事件。在此示例中,我们将为Disqus插件添加WordPress Cron作业。许多人可能想要这样做来改变同步频率,或者如果他们在评论来回同步时遇到问题。每个第三方插件开发人员的文档都应该有他们的cron事件的名称,或者更确切地说是操作名称。在这种情况下,插件使用的是“ dsq_sync_forum ”。

    如果您是从头开始创建一个,您将需要在代码中的某处有一个相应的动作钩子,例如您的functions.php文件。这是WP-Crontrol给出的示例:

    add_action( ‘my_hookname’, ‘my_function’ );
    add_action( ‘my_hookname’, ‘my_function’ );
    add_action( 'my_hookname', 'my_function' );

    下一步是编写您的函数。

    function my_function() {
    wp_mail( ‘hello@example.com’, ‘WP Crontrol’, ‘WP Crontrol rocks!’ );
    }
    function my_function() {
    wp_mail( ‘hello@example.com’, ‘WP Crontrol’, ‘WP Crontrol rocks!’ );
    }
    function my_function() {
    wp_mail( 'hello@example.com', 'WP Crontrol', 'WP Crontrol rocks!' );
    }

    对于Disqus,我们首先添加一个新的600秒(10 分钟)的cron计划。然后我们点击“Add Cron Event”并输入“dsq_sync_forum”作为我们的动作名称,选择下一次运行时间,并选择我们刚刚创建的10分钟重复。然后我们点击“Add Cron Event”。这将每10分钟自动运行一次,以便我们手动将Disqus评论同步回我们的WordPress数据库。

    添加WordPress Cron作业

    添加WordPress Cron作业

    就是这样!它真的很容易使用。

    WP-CLI管理WP-Cron

    您还可以在WP-CLI中管理WP-Cron事件和/或WordPress Cron作业。例如,以下命令将为您提供当前的cron事件列表。

    wp cron event list
    wp cron event list
    wp cron event list

    WP-CLI管理WP-Cron

    有关其他命令和参数,请参阅官方WP-CLI cron文档

  • 如何解决使用Cloudflare导致WP-Cron不工作问题?

    WordPress定时任务不工作

    WordPress需要一些基本要求,例如MySQL和正确的PHP版本才能正常运行。此外,您还需要额外的设置才能使已安装的插件和主题正常工作。

    WP-Cron是WordPress网站在仪表盘中获取更新和报告所需的此类要求之一。另一方面,Cloudflare是许多托管公司内置的流行的免费CDN服务。

    不幸的是,如果您没有正确配置Cloudflare,它可能会停止WP-Cron作业的运行并导致不希望出现的问题。如果您遇到困难,这里是您可以尝试通过Cloudflare CDN设置以修复WP-Cron无法正常工作的问题。

    更多关于WP-Cron

    Cron是Unix中用于调度作业以在后台完成任务的命令。在WordPress世界中,WP-Cron类似于Unix cron作业,用于以周期性间隔调度任务。与您可以在特定时间安排的系统cron作业不同,WP-Cron在每次页面加载时运行并触发预定任务。以下是一些示例,让您了解WP-Cron的作用:

    • 更新WordPress仪表盘小工具,例如实时销售小工具。
    • 检查处于预定状态的文章并按计划发布。
    • 插件可以在后台运行数据库更新、缓存清除等任务。

    您还可以在此处从官方WordPress页面阅读有关WP-Cron的更多详细信息。

    查找WP Cron问题

    当WP-Cron运行出现问题时,会直接影响定时任务的运行。您可以在仪表盘和服务器的错误日志中看到一些失败通知。下面是一个来自WP Rocket插件的例子,它使用WP-Cron来运行预定的缓存清除。如果不清除缓存,则会因大量过时的缓存内容而减慢您的网站速度。

    WP Rocket Cron作业问题

    WP Rocket Cron作业问题

    您还可以使用WP Crontrol之类的插件来监控和查找站点中与cron相关的问题。一旦您发现WP-Cron存在问题,您应该检查您最近在该网站上所做的活动。如果您启用了Cloudflare或更改了CDN中的任何设置,那么这是开始故障排除的第一个地方。

    在Cloudflare中检查WP Cron问题

    Cloudflare的安全设置允许您阻止恶意机器人。不幸的是,这也可以阻止像WP-Cron这样的自动化活动作为误报。好的部分是您可以根据日志中的IP地址和查询字符串轻松找到它。由于WP-Cron将从您的托管服务器的IP地址运行,您可以根据您的服务器的IP检查被阻止的条目以查找更多详细信息。

    • 如果您不知道服务器的IP地址,您可以从主机面板中找到它。或者,您可以转到Cloudflare帐户的DNS部分并找到带有@的A记录,该记录将指向您服务器的IP地址。
    • 之后,转到“Security>Overview”部分,然后单击“Add filter”按钮。
    • 根据与服务器IP相同的IP地址过滤日志。
    • 在这里,您应该找到显示“ /wp-cron.php ”的“Paths”部分,如下图所示。
    • 您还可以找到其他详细信息,例如阻止的原因,在我们的例子中是“manage defined bots”。

    查找服务器IP的安全详细信息

    查找服务器IP的安全详细信息

    如果您想了解更多详细信息,请在页面上向下滚动并查看活动日志部分。在这里,您可以找到为了解WP-Cron因托管规则设置和托管挑战而被阻止而采取的服务和操作。这取决于您的安全设置,您可能在其中选择了一些带有托管质询的选项。

    查看服务器IP的活动日志

    查看服务器IP的活动日志

    单击“Edit columns”按钮以添加可以显示更多详细信息的其他列。由于IP地址已经存在,请选择“Path”和“Query string”复选框。

    选择路径和查询字符串

    选择路径和查询字符串

    这将添加其他列并向您显示路径和查询字符串。正如您在下面的屏幕截图中所见,路径将显示为/wp-cron.php,查询字符串将显示类似?doing_wp_cron的内容。

    查找路径和查询字符串详细信息

    查找路径和查询字符串详细信息

    相关文章:

    使用Cloudflare修复WP-Cron问题

    现在很明显,Cloudflare安全设置会阻止WP-Cron在您自己的托管服务器上运行。尝试以下选项来解决问题。您可能需要检查您的WordPress仪表盘,使用插件或检查服务器的日志,如上所述,以确认WP-Cron工作正常。

    1.禁用绝对自动化的机器人

    免费Cloudflare帐户有一个简单的“机器人战斗模式”来阻止自动机器人。您可以转到“Security> Bots”部分并关闭此选项并检查WP-Cron是否在您的站点上运行。

    Bots Fight Mode

    在免费Cloudflare帐户中禁用Bots Fight Mode

    如果您使用高级Cloudflare计划,请在“Security > Bots”部分单击“Configure Super Bot Fight Mode”链接。

    在Cloudflare中配置超级机器人战斗模式

    在Cloudflare中配置超级机器人战斗模式

    在这里,您可以看到“Definitely automated”机器人被“Managed Challenge”选项阻止。这是您在活动日志中看到的“Definitely automated”,如上所述。由于WP-Cron肯定是在后台自动化的,Cloudflare会阻塞并造成麻烦。单击下拉菜单并选择“Allow”,Cloudflare将自动保存您的设置。

    允许绝对自动化的机器人

    允许绝对自动化的机器人

    在大多数情况下,这将解决Cloudflare的WP-Cron不工作问题。

    2.禁用WAF下的托管规则

    如果允许机器人不能解决问题,那么下一个选项是禁用Cloudflare自动设置的托管规则。根据您使用的平台,Cloudflare将自动启用某些Web应用程序防火墙 (WAF) 规则来保护您的站点。您可以转到“Security> WAF”部分并在“Managed rules”部分下找到为您的站点启用的规则。只需禁用“Managed rules”选项即可将其关闭。

    在Cloudflare中禁用托管WAF规则

    在Cloudflare中禁用托管WAF规则

    或者,进入页面并仅禁用Cloudflare WordPress规则集。

    禁用Cloudflare WordPress规则集

    禁用Cloudflare WordPress规则集

    现在,检查您的WP-Cron是否在没有来自Cloudflare的WAF规则的情况下运行。

    3. 在IP访问规则中将您的服务器列入白名单

    禁用WAF规则集是有风险的,这可能会破坏Cloudflare安全的目的。虽然您可以使用Wordfence和AIOWPS等插件来添加防火墙,但最好的选择是在Cloudflare WAF设置中允许您网站的服务器IP。当您位于Cloudflare帐户的WAF部分时,请转到“Tools”选项卡。输入您的服务器IP,选择允许和此网站选项,然后单击“Add”按钮。这将添加一个异常并避免阻止您自己的服务器的活动,如WP-Cron作业。

    为绕过Cloudflare防火墙添加IP例外

    为绕过Cloudflare防火墙添加IP例外

    小结

    Cloudflare是流行的CDN和安全服务,但是,它无法识别WordPress站点所需的另一个流行的WP-Cron作业。这是可以理解的,因为插件可以出于不同的原因运行WP-Cron并导致您的站点出现安全问题。

    不幸的是,即使在服务器上手动安排cron作业也无法解决问题,因为插件开发人员可能会使用默认的WP-Cron作业。解决方案是禁用机器人保护或排除服务器的IP地址,这将允许运行WP-Cron作业。