我正在尝试在我的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的工作就不行了。
如果我犯了错误,请纠正我。
答案 0 :(得分:0)
可能是因为您没有写入权限来写入data.txt所在的文件夹。由于您没有明确定义要写入的文件夹,它将写入您的PHP文件所在的文件夹
答案 1 :(得分:0)
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)。