wordpress的cronjob无限运行

时间:2014-08-05 07:43:58

标签: wordpress

我有这段代码:

// set up cron job
wp_schedule_event(time(), 'hourly', 'test_event');

add_action('test_event', 'testFunction');

function testFunction()
{
    $query = new WP_Query(array(
        'post_type' => 'tour',
        'post_status' => 'publish'
    ));


    while ($query->have_posts()) {
        $query->the_post();
        $post_id = get_the_ID();

        echo $post_id . "a<br>";
    }

}

当然,我禁用了Wp cronjob define('DISABLE_WP_CRON', true);

当我在浏览器中转到http://my-domain/wp/wp-cron.php?doing_wp_cron(域是本地的,因此无法使用wget在crontab中设置真正的cronjob)时,它会多次输出帖子ID,如下所示:

1
2
3
1
2
3

有时甚至更多,有时它会导致内存错误。在我看来,cronjob无限运行。我无法弄清楚原因。

不是WP专业版,所以任何建议都表示赞赏!

感谢。

2 个答案:

答案 0 :(得分:0)

当您致电wp_schedule_event时,会注册一个新活动。您应该只调用该函数一次(事件在全局范围内通过多次访问持续存在),文档建议scheduling after plugin activation

“要在插件中安排每小时活动,请在激活时致电wp_schedule_event(否则您最终会收到大量预定活动!)”

您需要使用wp_unschedule_event清除当前绑定,然后调用该函数一次。如果它是您主题的一部分,请使用它们激活并将您的主题切换为其他内容并返回。

答案 1 :(得分:0)

wp_schedule_event在您的WordPress安装中注册一个cron任务。

所以,你在这里做的是,每次你运行你的cron,你都会告诉WordPress在最后一次运行你的功能。

如果您已经访问过cron页面10次,那么您的cron每次访问将运行10次。

如果需要,您可以使用wp_unschedule_event取消预定活动。