时间:2021-05-02
PHP 本身是无法创建定时任务的,但是 WordPress 自带了一个伪定时任务(Cron) API,非常的方便好用,包括 WordPress 本身的定时发布文章都依赖于这个 API
WP Cron 是什么? 是 WordPress 一套定时触发机制, 可以循环安排任务执行. 如: 定时发布新文章, 定期检测版本等功能都是通过这个来实现的.
WP Cron 可以为我们实现什么? 我们可以循环更新和提交网站数据, 节日定期向读者发送贺卡或者表单 ...
它的原理就是将创建的定时任务存储到数据库里,当有人访问的时候就去判断一下是否到时间需要执行这个定时任务,如果到时间则执行。
因为这种原理,所以执行的时间可能会有一些偏差,但随着网站的浏览量攀升和网络爬虫的不断访问,会让定时任务执行的时间越来越准确。
WP-Cron 效率不高, 但还是很方便好用的, 整理了一下相关函数的使用方法如下.
函数
wp_get_schedule
通过勾子别名, 获取预定安排的勾子. 成功时返回循环周期类别 (hourly, twicedaily, daily, ...), 失败时返回 false.
? 1 <?php wp_get_schedule( $hook, $args ) ?> $hook: 勾子别名
$args: 勾子对应函数的参数数组 (可选)
wp_get_schedules
WordPress 默认支持的循环周期类别有 hourly, twicedaily 和 daily. 通过该函数我们可以获取所有这些循环周期数组.
? 1 <?php wp_get_schedules() ?>在默认情况下, 由以上方法获得的数组对象如下.
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 array( 'hourly' => array( 'interval' => 3600, 'display' => 'Once Hourly' ), 'twicedaily' => array( 'interval' => 43200, 'display' => 'Twice Daily' ), 'daily' => array( 'interval' => 86400, 'display' => 'Once Daily' ) )我们可以向 cron_schedules 过滤器添加更多的类型. 添加例子如下:
? 1 2 3 4 5 6 7 8 9 10 11 add_filter('cron_schedules', 'cron_add_weekly'); function cron_add_weekly( $schedules ) { // Adds once weekly to the existing schedules. $schedules['weekly'] = array( 'interval' => 604800, // 1周 = 60秒 * 60分钟 * 24小时 * 7天 'display' => __('Once Weekly') ); return $schedules; } wp_next_scheduled通过勾子别名, 获取预定安排的下一个运行时刻, 以整型返回. 常用于判断是否已经做了预定安排.
? 1 <?php $timestamp = wp_next_scheduled( $hook, $args ); ?> $hook: 勾子别名
$args: 勾子对应函数的参数数组 (可选)
wp_schedule_event
按周期循环预定安排一个 WordPress 勾子, 在预定时间触发勾子对应的函数.
? 1 <?php wp_schedule_event($timestamp, $recurrence, $hook, $args); ?> $timestamp: 时间 (整型)
$recurrence: 循环周期类别 (hourly, twicedaily, daily, ...)
$hook: 勾子别名
$args: 勾子对应函数的参数数组 (可选)
wp_reschedule_event
按周期循环重新预定安排一个 WordPress 勾子. 但我发现这个方法不能正常使用, Codex 写得很草, 如果哪位清楚知道怎么使用, 请告知一下.
wp_unschedule_event
通过预定时间和勾子别名, 取消预定的安排.
<?php wp_unschedule_event($timestamp, $hook, $args ); ?>
$timestamp: 时间 (整型)
$hook: 勾子别名
$args: 勾子对应函数的参数数组 (可选)
wp_clear_scheduled_hook
通过勾子别名, 移除预定安排的勾子.
<?php wp_clear_scheduled_hook( $hook ); ?>
$hook: 勾子别名
wp_schedule_single_event
预定安排一个 WordPress 勾子, 在预定时间触发勾子对应的函数. 与 wp_schedule_event 不同的是该方法的只安排一次触发, 不存在循环预定.
? 1 <?php wp_schedule_single_event($timestamp, $hook); ?> $timestamp: 时间 (整型)
$args: 勾子对应函数的参数数组 (可选)
从上面的函数可用的参数来看,我们就可以整理出以下几个常用的参数:
参数
$timestamp
(整数)(必须)第一次执行此定时任务的时间,需要传一个时间戳,一般情况下都是当场执行,但不能用 time() 函数,而是用 WordPress 的时间函数 current_time()。
默认值:None
$recurrence
(字符串)(必须)执行频率。每隔多长时间执行一次。可以填写 hourly (每小时执行一次)、twicedaily (每天执行两次,也就是 12 小时执行一次)和 daily (24 小时执行一次)。
默认值:None
$hook
(字符串)(必须)执行的钩子。在执行定时任务的时候会调用这个钩子,往这个钩子挂在函数即可实现定时执行函数。
默认值:None
$args
(数组)(可选)传递的参数,会被传递到挂载到定时钩子的函数里的参数。
默认值:None
返回值
(布尔 | null)如果添加成功则返回 null,不成功则返回 False
例子
? 1 if( !wp_next_scheduled( 'test' ) ) wp_schedule_event( current_time( 'timestamp' ), 'twicedaily', 'test' );首先使用 wp_next_scheduled() 函数判断是否已经创建,如果没创建则创建一个定时任务。
把需要执行的代码挂载到 test 钩子上就行了。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
记录下Spring自带的定时任务用法。spring中使用定时任务基于xml配置文件使用定时任务首先配置spring开启定时任务
前言众所周知在spring3.0版本后,自带了一个定时任务工具,而且使用简单方便,不用配置文件,可以动态改变执行状态。也可以使用cron表达式设置定时任务。被执
今天用scheduled写定时任务的时候发现定时任务一秒重复执行一次,而我的cron表达式为*0/2****。在源码调试的过程中,发现是我的定时任务执行过程太短
起步在《分布式任务队列Celery使用说明》中介绍了在Python中使用Celery来实验异步任务和定时任务功能。本文介绍如何在Django中使用Celery。
问题描述:在网站开发中,需要经常开启一些定时任务,例如定时清理脏数据等。本文主要介绍使用laravel自带的TaskScheduling配合cron实现定时任务