WordPress 自动化任务调度

schedule-time-based-tasks

网站如果有需要定期执行的任务时,WordPress 系统核心提供了一种独立于操作系统的自动化任务调度功能(WP-Cron),其自动化调度机制是每当有网页加载的时候检查任务列表看是否有任务需要运行,和操作系统的任务调度方式不同, WP-Cron 只在有网页加载的时候被触发。另外一个不同点是,WordPress 任务存放在队列中,当页面装载时被调出执行,不存在无法被执行的情况。

WordPress 按照用户选择的时间间隔定期指定任务,时间间隔可以使用系统缺省的也可以自定义,缺省的时间间隔有三个即每小时、每天、每两天。比如计划每 30 秒执行一个任务,代码如下:

/* 首先定义时间间隔 */
add_filter( 'cron_schedules', 'create_cron_interval' );

function create_cron_interval( $schedules ) {
    $schedules['thirty_seconds'] = array(
        'interval' => 30,
        'display'  => esc_html__( 'Every Thirty Seconds' ),
    );

    return $schedules;
}
/* 创建用户任务 */
add_action( 'user_cron_hook', 'user_cron_function' );

/* 把任务加入调度队列 */
if ( ! wp_next_scheduled( 'user_cron_hook' ) ) {
    wp_schedule_event( time(), 'thirty_seconds', 'user_cron_function' );
}

如果要把任务移出调度队列,使用下面的代码:

$timestamp = wp_next_scheduled( 'user_cron_hook' );
wp_unschedule_event( $timestamp, 'user_cron_hook' );

另外,如果要把 WordPress 任务调度同操作系统任务调度集成,可以使用如下的代码:

/* 修改 WordPress 配置文件 wp-config.php,禁用 WP-Cron */
define('DISABLE_WP_CRON', true);

/* 操作系统(linux)任务定义,每天0:0执行一次任务 */
0 0 * * * command

/* 调用 WordPress WP-Cron */
0 0 * * * wget --delete-after http://example.com/wp-cron.php

发表评论

邮箱地址不会被公开。 必填项已用*标注