Cron和WordPress不起作用。我忘记了什么?

时间:2012-03-25 08:54:19

标签: wordpress cron wordpress-plugin

我正在尝试在我的wordpress博客中实现一个cron作业。我想在插件中做这些东西,为了测试我试图在一个文件中每10分钟写一些日志信息,为此我写了这段代码(PHP):

add_filter( 'cron_schedules', 'ten_minute_prefix' );
function ten_minute_prefix( $schedules ) 
{
    $schedules['tenmins'] = array(
        'interval' => 600,
        'display'  => __( '10 minutes' ),
    );
    return $schedules;
}

//This must be here always
add_action('my_task_hook', 'foo_task'); 
function foo_task() 
{               
    file_put_contents('data.txt', date("Y-m-d H:i:s") . "task do it\r\n", FILE_APPEND);
} 

//This is executing in my plugin page in tools section
function myplugin()
{
    //For checking permissions
    file_put_contents('data.txt', date("Y-m-d H:i:s") . "Task begin\r\n", FILE_APPEND);     
    wp_schedule_event( time(), 'tenmins', 'my_task_hook' ); // hourly, daily and twicedaily
    echo "SCHEDULE ACTION";
    ...
}

为了检查我是否真的创建了cron作业,我使用了这个插件http://wordpress.org/extend/plugins/cron-view/。这个插件告诉我这个“条目#10:my_task_hook√动作存在”。

但是什么也没发生,文件没有写,问题是什么?

编辑:

我在myplugin函数中添加了一行,看看我是否有写文件的权限。事实上,我有权限,在wp-admin /文件夹中创建了一个data.txt文件。

EDIT2:

我只是要了解wordpress中的cron作业!

Wordpress中的Cron不是真正的cron,它只会在任何用户打开网页时触发,如果没有人打开页面,则该过程不会触发。所以,如果一个博客没有访客,那么cron的工作就不行了。

如果我犯了错误,请纠正我。

2 个答案:

答案 0 :(得分:0)

可能是因为您没有写入权限来写入data.txt所在的文件夹。由于您没有明确定义要写入的文件夹,它将写入您的PHP文件所在的文件夹

答案 1 :(得分:0)

1)对。检查你的目录是否可写...

if (is_writable(dirname(__FILE__))){
    file_put_contents(dirname(__FILE__).'/data.txt', date("Y-m-d H:i:s") . "task do it\r\n", FILE_APPEND);

} else {
    mail('yourmail@example.com', 'oops!', 'error writing');
}

2)你的cron scheldule在哪里被激活?

add_action('activate_' . __FILE__, 'plugin_activate_demo'));    
add_action('deactivate_' .__FILE__,  'plugin_deactivate_demo'));
function plugin_activate_demo(){
    wp_schedule_event( time(), 'tenmins', 'my_task_hook' );  
}

function plugin_deactivate_demo(){
    wp_clear_scheduled_hook('my_task_hook' );  
}
3)我上班的几乎不可能的情况 - 检查你是否有工作cron ...通过向你的hook_action代码添加邮件或类似的东西来简单。在某些服务器上由于dns问题(许多联网服务器和网址路由问题)服务器名称在http://yourservername.com请求时没有响应(由wp-cron)。