使用操作系统如linux或宝塔控制面板计划任务触发,正确设置 WordPress 定时计划任务(cronjob)

2022-03-08 0 288

经常使用 WordPress 进行开发的朋友可能都知道,WordPress 有一套自己的定时计划任务系统,主要用来执行定时发布文章,定时检查 WordPress 内核、主题、插件更新等任务。标准的 Linux 计划任务(Cron job)只要指定好了时间,只要操作系统开机,不管用户是否在使用计算机,计划任务就会在指定的时间自动执行。而 WordPress 的计划任务有点不一样,设置 WordPress 定时任务的时候,WordPress 会先把计划任务的信息写入数据库,当下一次用户访问网站的时候,WordPress 计划任务系统会检查一下当前时间点之前是否有需要执行的任务,如果有,就执行任务。

WordPress 定时任务计划系统的问题

基于这个原理,我们很容发现问题,WordPress 的计划任务到了指定的时间点,并非一定会执行;就算计划任务执行了,执行的时间也不一定是指定的时间。如果我们定义了一个每小时执行的任务,而在最近一个小时之内,没有人访问我们的站点,计划任务就不会被执行。如果我们的站点用户访问量非常大,一般不会遇到这个问题。但是如果我们开发的是一个插件,需要每小时、每天、每周、每月或任何一个时间段定期执行任务,使用 WordPress 任务计划系统就不是一个好主意了。也就是说,WordPress 计划任务系统并不是一个非常可靠的系统。如果我们需要计划任务严格按照指定的时间执行,用 WordPress 的计划任务系统实现肯定是不行的。

一个真实的定时任务例子

用户上传了一个 CSV 文件到服务器上的一个目录,我们需要每个小时检查一下这个目录,如果目录里面有文件,把文件的内容导入数据库并删除文件,如果没有文件,跳过执行。很简单的一个操作。但是,就像我们刚刚提到的,如果我们使用 WordPress 的计划任务安排功能 wp_schedule_event 来设置这个任务计划,万一一个小时内没有人访问网站,检查目录和导入文件的操作就不会被执行。

使用操作系统的计划任务触发 WordPress 的计划任务

我们知道,操作系统的计划任务,只要设置好了,到了时间就会自动执行,没有其他的附加条件。所以要解决这个问题,我们需要设置一个操作系统级别的任务计划,模拟用户定时访问站点。为了避免操作系统的任务计划和 WordPress 的任务计划器冲突,造成重复执行的问题,我们先禁用 WordPress 的任务计划系统,然后使用 wp_schedule_event 安排我们的任务计划操作。

1. 禁用 WP Cron 定时任务系统

在 wp-config.php 中, 添加下面的定义代码:

define('DISABLE_WP_CRON', true);

2. 添加事项操作

首先,定义一个每小时指定的动作,指定一个需要执行的函数名称,在下面的例子中,就是 update_db_hourly。

add_action( 'my_hourly_event', 'update_db_hourly' );

3. 添加定时任务函数

现在,定义 update_db_hourly 函数使用 WordPress 调度事项。如果是在插件中,我们可以在插件激活时,调度任务, (同时,不要忘了在插件禁用时移除调度):

public static function activate() {
    wp_schedule_event( time(), 'hourly', 'my_hourly_event' );
}
public static function deactivate() {
    wp_clear_scheduled_hook('my_hourly_event');
}

最后,定义执行实际的操作函数,也就是第一步指定的 update_db_hourly。

public function update_db_hourly() {
    // 1. 检查是否有文件
    // 2. 如果有、导入,然后删除
    // 3. 如果没有,不执行任何操作
}

4. 设置计划任务

基于 cPanel 或其他面板的主机一般都有自定义计划任务的界面,我们可以通过 Web 界面非常方便的设置计划任务,有些服务器没有在图形界面,只能通过访问命令行,通过命令来设置计划任务。Linux 系统可以通过 crontab -e 来编辑计划任务,加入以下指令到计划任务文件、然后保存即可。

*/15 * * * * wget -q -O - http://yourdomain.com/wp-cron.php?doing_wp_cron

或者使用 curl 也可以达到同样的目的。

*/15 * * * * curl --silent "https://www.mashshare.net/wp-cron.php?" > /dev/null 2>&1

上面的设置将每 15 分钟执行一次,向 WordPress 站点发出请求,从而启动我们设置好的计划任务。

设置计划任务并不是一个非常复杂的过程,但是除非您熟悉 WordPress 定时任务系统的工作原理,使用的时候就会遇到我们上面提到的问题。希望本文能够帮助你了解 WordPress 是如何处理计划任务的,并在需要的时候正确设置 WordPress 的任务计划。除了常见的定时操作,我们还可以在 WordPress 计划任务系统的基础上实现异步 PHP 和定时任务队列,有需要的朋友可以点击链接了解详情。

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 WordPress教程 使用操作系统如linux或宝塔控制面板计划任务触发,正确设置 WordPress 定时计划任务(cronjob) http://www.20zxx.cn/364416/wordpres/wordpressq.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务