如何创建和修改WordPress定时任务(WP-Cron)
Cron是一个Unix/Linux实用程序,通常用于在后台运行的Web服务器上安排命令或脚本。Cron作业是任务本身,它用于在定期的固定时间、日期或间隔安排任务。通常,这些涉及重复的任务,这些任务是自动化的以节省时间。在WordPress中,这是由WP-Cron处理的,它用于模拟系统cron。
WordPress的cron作业的一些示例可能涉及安排要发布的文章或按预定义的时间表运行的备份插件。今天我们将深入探讨如何轻松创建、修改和运行WordPress的cron定时作业。
什么是WordPress Cron Job?
WordPress 有自己的 cron 系统,用于安排任务,如检查更新、安排发布文章和删除垃圾箱中的评论。所有 cron 作业都由 WP-Cron 处理。
虽然 WP-Cron 的名称(和主要思想)来自 UNIX cron,但 WordPress cron 并不这样工作,而是使用时间间隔来进行任务调度。WordPress 提供的默认时间间隔为每小时、每天两次、每天和每周。在这里,基于时间的任务取决于用户是否访问您的网站,也就是说,只有当用户访问您的网站时,WordPress cron 才会执行任务。
换句话说,WordPress cron 会在页面加载时执行。有时这并不那么可靠,这就是为什么许多用户更喜欢服务器级的 cron 作业而不是 WP-Cron 作业。
使用WordPress Cron的好处
如果您想使网站流程自动化,或者需要定期检查、验证和控制网站流程,那么 cron 作业就会派上用场。例如,我们可能希望每天 ping 一次服务器,每小时检查一次系统状态(并将其记录到数据库中),等等。
WP Cron 可以让 WordPress 内核和其他插件轻松执行基于时间的任务。相对而言,设置 WordPress Cron 作业要比使用需要 Linux 命令知识的真正 cron 作业简单得多。
此外,由于 WP-Cron 使用时间间隔来安排任务,因此您可以放心,即使预定时间已过,您的任务最终也会运行,而不像真正的 cron 会指定任务运行的确切时间。如果时间已过而任务未能运行,那么它将不会再次运行,直到你手动重新安排它。
如何管理WordPress Cron作业
设置和管理 WordPress cron 作业的方法有很多,但我将向您介绍两种常用的方法。
第一种方法是使用像 WP Crontrol 这样的 cron 管理插件,它允许您直接从 WP 仪表板添加、修改和管理 WordPress cron 作业。您还可以创建 cron 作业、构建钩子和函数,并为任务定义自定义时间间隔。
第二种方法是使用 WordPress CLI。
如何使用插件管理WordPress Cron作业
我将使用 WP Crontrol 插件,它允许您查看和控制 WordPress 应用程序的 WordPress cron。它是处理 WP cron 作业的流行插件,拥有超过 200,000+ 个活跃安装。
WordPress插件-WP Control
这个插件超级好用。显示应该运行哪些CRON作业,这是了解正在发生的事情以及它是否有效的很好的第一步。此外,您可以创建新的cron作业并触发现有的运行。— Josh,Caldera Forms的创建者
您可以从WordPress插件库下载它,也可以在WordPress仪表盘中的“安装插件”插件下搜索它。WP Control的功能包括:
- 能够查看所有cron事件及其参数、重复和下次运行时间。
- 编辑、删除并立即运行任何cron事件。
- 添加新的cron事件。
- 添加、编辑和删除自定义cron计划。
要安排WP-Cron事件,您必须创建自定义钩子。我们建议您查看官方WordPress插件手册,其中有关于安排WP Cron事件的惊人指南。如果您正在寻找使用WordPress设置系统cron的替代方法,我们建议您查看Tom Mcfarlin关于定义WordPress cron作业的文章。对于那些可能不那么先进的人,我们将探索如何轻松使用 WP-Cron以及流行的免费WP Crontrol插件。这使您可以查看和控制WP-Cron系统中发生的事情。
WP-Cron 不会持续运行。默认情况下,wp-cron.php 会在每次页面加载时启动,这在大流量网站上可能会造成问题。如果一个网站没有足够的 PHP Worker,有时会有请求进来,WordPress 会生成 cron,但 cron 必须等待 Worker,所以就停在那里。
这是管理 WordPress cron 作业最简单的方法,你可以快速查看、编辑、创建、删除 WordPress cron 事件,并做更多事情。
Step 1:安装WP Control插件
与其他插件一样,您需要从插件库中安装 WP Crontrol 并激活它。
安装完成后,你会发现“工具”选项卡中出现了一个新选项 “Cron Events”。
Step 2:查看并了解Cron事件
接下来,您需要点击 Cron Events,查看在 WordPress 应用程序上运行的 cron 事件列表。
许多动作名称很容易识别,因为它们应该与插件名称的一部分相匹配,例如“woocoomerce_cleanup_sessions”或“gravityforms_cron”。
您可以在此部分运行、编辑和删除 cron 事件。将鼠标悬停在任何 cron 事件上时,都会看到该选项。
您只需单击操作名称旁边的“立即运行”即可立即运行Cron事件。这在排除故障时会很有帮助,因为您可能需要多次运行Cron事件。
成功执行cron事件
你还可以找到关于这些 cron 作业的有用信息,并快速识别哪个 cron 作业用于什么目的等。
- 在第一列中,钩子显示了 WordPress 核心或任何插件使用的钩子名称。例如,前缀“wp”简单地表示它是 WordPress 核心的 cron。
- 你还会注意到,没有删除这些 cron 事件的选项,不过你可以使用编辑和立即运行选项。同样,对于你的插件,你会发现使用了其他前缀(例如,对于 WooCommerce,使用了“wc”或“woocommerce”)。
- 第二列“Arguments”包含传递给钩子函数的参数。
- 第三列显示 cron 作业下次运行的时间。
- 第四列(Action)显示 cron 将执行的动作(cron 作业的“函数”)。
- 最后一列定义了 cron 作业的重复时间。这是计划任务的时间间隔。
Step 3:编辑Cron事件
现在让我们编辑一个 WP cron 作业来测试这个插件。
- 转到钩子的名称并点击 Edit。
- 这时会弹出一个新的部分“Edit Cron Event”,你会看到不同的字段(您可以更改操作名称、参数、下一次运行和计划的重复。请注意这一点,因为许多插件依赖于它们的Cron作业才能正常运行。)。在我的例子中,我编辑了“wp_privacy_delete_old_export_files”钩子。
- 接下来,我要将此 cron 作业的重复性改为 “Once Hourly (hourly)”。
Step 4:添加自定义时间间隔
接下来,我将教你如何为 cron 事件添加自定义时间间隔。
- 进入 WordPress 设置 → Cron 计划。
- 现在,点击“Cron Schedule”选项卡,就会出现一个新界面,在这里你可以看到计划时间间隔的详细信息。
- 填写“内部名称”、“间隔秒数”和 “显示名称”,然后点击 “Add Cron Schedule”。
- 请注意,输入的时间间隔单位是秒。我将使用 600 秒将时间间隔设置为 10 分钟。
- 现在,您可以编辑 cron 事件并将其替换为自定义时间间隔。
Step 5:添加新的cron事件
现在你知道如何管理 cron 事件的简单任务了,但如果你想为 WordPress 应用程序添加自己的 cron 作业怎么办?别担心,这非常简单,您必须按照以下说明操作。
- 首先,点击添加 cron 事件,然后进入添加 cron 部分。
- 然后,给出一个钩子名称(应遵循正常的 PHP 命名规则,不能有空格)。
- 然后,添加参数(这是可选的);在我的例子中,参数是空白的。
- 接下来,选择任意选项,并在“Next Run”字段中填入时间。
- 最后,为新 cron 选择一个重复时间(计划时间),然后点击添加事件。
- 如果对此有任何疑问,可以从 cron 事件中检查任何正在运行的 cron 作业设置。
- 添加新的 cron 作业后,进入 cron 事件选项卡,检查新创建的 cron。你会发现,操作栏将显示 None(错误)。这是因为您还没有为该 cron 作业定义任何操作。
- 因此,您需要在主题的 functions.php 文件中编写几行代码并添加一个动作。
注意:在进一步操作之前,强烈建议备份 WordPress 网站。
- 进入WordPress 控制面板 → 外观,然后点击主题文件编辑器。
- 从页面右侧的主题文件选项中点击 function.php 文件。
- 在主题的 function.php 文件中
后添加以下代码行
add_action( 'wbolt_new_cron', 'cw_function' ); function cw_function() { wp_mail( 'admin@wbolt.com', 'Wbolt Cron', 'Wbolt - Developed on WordPress!' ); }
注意: 确保钩子名称前后一致,及将电子邮件地址换成你自己的。
你可以在上图中看到,我是直接用 WordPress 的仪表盘编辑的。如果你愿意,也可以通过 FileZilla 等 FTP 客户端编辑该文件。
接下来,检查电子邮件收件箱,看看我们是否收到了邮件。
完成了,我们成功添加了一个新的 cron 事件。
另外一个示例中,我们将为Disqus插件添加WordPress Cron作业。许多人可能想要这样做来改变同步频率,或者如果他们在评论来回同步时遇到问题。每个第三方插件开发人员的文档都应该有他们的cron事件的名称,或者更确切地说是操作名称。在这种情况下,插件使用的是“ dsq_sync_forum ”。
如果您是从头开始创建一个,您将需要在代码中的某处有一个相应的动作钩子,例如您的functions.php文件。这是WP-Crontrol给出的示例:
add_action( 'my_hookname', 'my_function' );
下一步是编写您的函数。
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作业
如何使用WP CLI管理WordPress Cron作业
您还可以通过 WordPress CLI 查看和管理所有 WordPress cron 作业。例如,以下命令将为您提供当前的cron事件列表。
wp cron event list
有关其他命令和参数,请参阅官方WP-CLI cron文档。
要通过 WP CLI 管理 Cron 作业,可以参考以下步骤:
- 您可以使用 PuTTy 登录服务器。输入服务器的 IP 地址,然后点击打开。
- 在 PuTTy 中输入服务器管理面板的服务器用户名和密码。
- 接下来,输入 WordPress 应用程序的路径。在我的例子中,URL 是:
cd applications/urrghmpqks/public_html/
- 接下来,您需要运行这条命令:
wp cron event list
- 您可以看到钩子名称、下一次运行时间、下一次相对运行时间和重现时间(计划时间)。
如何设置服务器Cron Job
现在,您已经知道什么是 WordPress cron 作业以及它是如何工作的了。如果你想在流量低、需要在特定时间运行的重要任务、过度的 DDoS 攻击或页面加载时间长的情况下用服务器级别的 cron 作业来代替它,该怎么办呢?
注:需要注意的是,WP-Cron与系统cron略有不同,它们各有优缺点。例如,WP-Cron完全依赖于时间间隔,而系统cron依赖于特定时间。WP-Cron也仅在页面加载时(后端或前端)有效,这可能不太可靠。WordPress提供的默认时间间隔是每小时、每天两次和每天。
Step 1:打开并编辑wp-config.php文件
首先,你需要使用 FTP 客户端(如 FileZilla)或 SSH 客户端(如 PuTTY)打开 wp-config 文件。然后,编辑该文件,将下面一行代码放在/* That’s all. Stop editing! Happy blogging. */的前面。
define('DISABLE_WP_CRON', true);
这段代码禁用了 WordPress 网站上正在运行的 cron 事件(即禁用了WP-Cron),现在你可以创建一个服务器层级的 cron 作业了。
Step 2:为服务器添加新的Cron Job
可以按照以下步骤操作:
- 登录宝塔面板,先使用你的浏览器访问宝塔面板的管理地址,输入账号密码登录。
- 进入计划任务管理界面,在宝塔面板首页,找到左侧菜单中的“计划任务”或“定时任务”选项,点击进入任务管理页面。
- 添加新的计划任务,点击“添加任务”按钮,选择“Shell 脚本”或“命令命令”类型的任务。
- 填写任务内容,在任务内容中输入如下命令:
wget -q -O - 'https://wordpress-413270-1299955.cloudwaysapps.com/wp-cron.php?doing_wp_cron' >/dev/null 2>&1
在上述命令中,我首先为 cron 作业定义了五分钟的时间间隔。你可以使用本网站检查时间计划表达式。在我的例子中, */5 * * * *
就是时间间隔表达式。
就这样!你已经成功添加了一个服务器 cron 作业。
如何查看和控制WordPress Cron作业
要优化 WordPress 网站的性能,必须有效地查看和控制 cron 事件。请按照以下步骤使用 WP Crontrol 插件:
安装和激活:
首先在 WordPress 网站上安装并激活 WP Crontrol 插件。
访问 Cron Events:
激活后,导航至 “工具” – “Cron Events” 页面查看和控制 cron 设置。
查看 Cron 事件:
- 该页面会显示网站上所有计划的 cron 事件列表,并以钩子名称标识。
- 钩子名称通常可以让人了解每个事件的目的。
- 信息包括下一次计划运行时间和两次事件之间的时间间隔。
控制 Cron 事件:
- 在列表中,在某些插件下,你会看到编辑 | 立即运行 | 暂停此钩子 | 删除等选项。
- 注意: 处理 cron 事件时要小心,尤其是 WordPress 的默认事件。
处理资源密集型事件:
- 如果插件创建了资源密集型 cron 事件,首先检查插件设置中的控制选项。
- 如果没有,请点击 cron 事件旁边的 “编辑 ”链接进行进一步调整。在本例中,我将调整 breeze_purge_cache 插件的设置。
修改 Cron 设置:
- 单击“编辑”打开“Modify Cron Event”选项卡,您可以在此更改事件的频率。
- 修改完成后,单击“Update Event”保存设置。
小结
希望本文能帮助您了解 WordPress cron 作业的工作原理。我讨论了管理 WordPress cron 作业的两种方法:一种是通过插件,另一种是通过 WP-CLI。我还讨论了在WordPress 实时服务器上设置一个真正的 cron 作业。如果您有任何问题,请在下面的评论区告诉我。