Cron и WordPress не работают. Что я забыл? - PullRequest
1 голос
/ 25 марта 2012

Я пытаюсь реализовать работу cron в моем блоге WordPress. Я хочу сделать это в плагине, для тестирования я пытаюсь записывать в один файл некоторую информацию журнала каждые 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 √ действие существует".

но ничего не происходит, файл не пишется, в чем проблема?

Edit:

Я добавил одну строку в функцию myplugin, чтобы посмотреть, есть ли у меня разрешение на запись файлов. На самом деле, у меня есть разрешения, в каталоге wp-admin / folder создается файл data.txt.

Edit2:

Я просто для того, чтобы понять работу cron в WordPress!

Cron в WordPress не является настоящим Cron, он срабатывает только тогда, когда любой пользователь открывает веб-страницу, если никто не открывает страницу, процесс не будет запущен. Так что, если у блога нет посетителей, задания cron не работают.

Пожалуйста, поправьте меня, если я ошибаюсь.

Ответы [ 2 ]

0 голосов
/ 25 марта 2012

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?

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 (многие сетевые серверы и проблемы с URL-маршрутами) имя сервера не отвечает, пока http://yourservername.com запрошено (wp-cron).

0 голосов
/ 25 марта 2012

Это может быть связано с тем, что у вас нет прав на запись в папку, в которой находится data.txt. Поскольку вы не определили явно, в какую папку записывать, она будет записывать в папку, в которой находится ваш PHP-файл. .

...