WordPress cron不计划在亚马逊Web服务上运行

时间:2015-09-01 作者:aabreu

我正在尝试设置一个cron每小时运行一次,它在我本地的流浪者箱上运行得很好,但在aws(elastic beanstalk)上似乎没有正确的时间表。代码如下:

register_activation_hook(__FILE__, \'my_activation\');
add_action(\'my_hourly_event\', \'do_this_hourly\');

function my_activation() {
    wp_schedule_event(time(), \'hourly\', \'my_hourly_event\');
}

function do_this_hourly() {
    another_function();
}

register_deactivation_hook(__FILE__, \'my_deactivation\');

function my_deactivation() {
    wp_clear_scheduled_hook(\'my_hourly_event\');
}
这有什么问题吗,还是其他原因在起作用?

我在本地和aws上都安装了w3 total cache,所以我不认为这是罪魁祸首,正如我听到人们提到的那样。

谢谢

2 个回复
SO网友:Jim Maguire

作为一般原则,您不应该在插件激活挂钩之后执行任何需要“add\\u操作”的操作。这是因为WP加载并运行所有插件,然后运行新添加的插件,然后重新定向。您必须设置一个DB选项并连接到该选项中。以下是法典中的讨论:https://codex.wordpress.org/Function_Reference/register_activation_hook

尝试在激活挂钩之外执行此操作,看看会发生什么。换句话说,PHP在每个浏览器请求上运行整个Wordpress例程。当您“激活”一个插件时,实际上会向服务器发出两个页面请求。这种类型的活动正确地进入第二页请求,这是重新定向。

SO网友:Pmpr

您可以使用以下步骤使其工作:`1. Setup an schedule

function my_schedule( $schedules ) {
    $schedules[\'hourly\'] = array(
        \'interval\' => 60 * 60,
        \'display\' => __( \'One houre\' )
    );
    return $schedules;
}
add_filter( \'cron_schedules\', \'my_schedule\' );

2. Register the activation hook

register_activation_hook( __FILE__, \'my_activation\' );

function my_activation() {
    $timestamp = wp_next_scheduled( \'my_hourly_event\' );
    if( false == $timestamp ){
        wp_schedule_event( time(), \'hourly\', \'my_hourly_event\' );
    }
}

3. Add action on the event

function do_this_hourly() {
    // The cron functionality and rest of your code here
}
add_action( \'my_hourly_event\', \'do_this_hourly\' );