Wordpress cronjob每5秒无法正常运行

时间:2018-11-14 17:37:00

标签: php wordpress

我已将以下内容添加到我的Wordpress functions.php文件中,以便每5秒将一封邮件发送到输入的电子邮件地址,但是它不起作用。我添加了一些日志记录以检查作业是否运行了钩子,但这只是对其进行初始化而已:

add_filter( 'cron_schedules', 'five_seconds_interval' );
function five_seconds_interval( $schedules ) {
    $schedules['five_seconds'] = array(
        'interval' => 5,
        'display'  => esc_html__( 'Alle 5 Sekunden' ),
    );

    return $schedules;
}

add_action('init', 'schedule_my_cron',10);
function schedule_my_cron(){
    error_log("schedule_my_cron()");
    wp_schedule_event(time(), 'five_seconds', 'my_job');
}

function my_job() {
    error_log("my_job()");
    wp_mail('test@localhost.de', 'Cronjob funktioniert!', 'LOL', 'Von IBims');
}

这是我在日志文件中得到的:

[14-Nov-2018 17:31:24 UTC] schedule_my_cron()

我还禁用了我的配置文件中Wordpress的常规cronjob:

  

define('DISABLE_WP_CRON',true);

在此之后,我创建了一个工作正常的unix cronjob。因此,我期望每5秒运行一次unix cronjob时,我会将邮件发送到该地址。怎么了?

更新

我可以确认自定义计划已成功添加,这是wp get schedules()输出的一部分:

[five_seconds] => Array
    (
        [interval] => 5
        [display] => Alle 5 Sekunden
    )

1 个答案:

答案 0 :(得分:3)

根据the documentation for the function,您需要对计划中调用的函数使用add_action(),而不是执行计划的函数。 wp_schedule_event()的第三个参数是动作挂钩的名称,而不是函数名称。尝试这样的事情:

register_activation_hook(__FILE__, 'schedule_my_cron');
add_action('init', 'schedule_my_cron',10);
function schedule_my_cron(){
    error_log("schedule_my_cron()");
    wp_schedule_event(time(), 'five_seconds', 'my_five_second_event');
}

add_action('my_five_second_event', 'my_job');
function my_job() {
    error_log("my_job()");
    wp_mail('test@localhost.de', 'Cronjob funktioniert!', 'LOL', 'Von IBims');
}