Intereting Posts
Можете ли вы иметь несколько сайтов WordPress в одном домене? Как преобразовать запрос sql в shortcode в wordpress? wp_update_post () пустой экран Как добавить второй раздел контента при использовании определенного шаблона страницы How-to: перетащите репозиторий GitHub на серверы wordpress plugin Почему сервер предотвращает стили администрирования? (Был: Где хранятся сеансы WordPress?) Как получить объект ошибки, возвращенный wp_create_user Пользовательская тема, контактная форма 7 и быстрая защищенная форма не работают Пользовательские полевые множественные оговорки Как получить входные сообщения об ошибках в настраиваемом шаблоне Попытка обернуть <span> вокруг первого слова нескольких строк слова с помощью фильтра widget_title (), работает только на двух словарных строках и не более двух Исключить сообщения из виджета, пока сообщение отображается на домашнем, одноместном и категориях query_post по названию? Многоязычные заголовки сообщений, не переводимые с помощью списка Категория Сообщения Плагин Как играть в видеоролики amazon S3 в WordPress 3.6?

Несколько заданий wp_schedule_event cron в плагине вызывают многократное выполнение

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

Код, который я связал ниже, запускается и отправляет мне письмо с выходом (со вторым и третьим событиями). Проблема возникает, когда я удаляю комментарии с заданий 2 и 3. Плагин активируется нормально, но когда запускаются задания, я получаю много дубликатов писем.

ПРИМЕЧАНИЕ ** Это веб-сайт с высоким трафиком, который может появляться много раз во время запланированного события. В некоторых чтениях я упоминал, что у wp-cron были некоторые известные проблемы, связанные с длинными сценариями, и они могут перекрываться.

Говоря это, мне интересно, слишком ли велики работы cron для работы с wp-cron. Это заставляет меня отключить DISABLE_WP_CRON в моем wp-config.php и идти с планировщиком cron, предоставляемым моим хостом? Или моя проблема в том, как я создал свой плагин?

Заранее спасибо!

register_activation_hook(__FILE__,'cron_activation'); register_deactivation_hook(__FILE__,'cron_deactivation'); function cron_activation(){ wp_schedule_event(time()+60, 'daily', 'first_hook'); //wp_schedule_event(time()+420, 'hourly', 'second_hook'); //wp_schedule_event(time()+840, 'hourly', 'third_hook'); } function cron_deactivation(){ wp_clear_scheduled_hook('first_hook'); //wp_clear_scheduled_hook('second_hook'); //wp_clear_scheduled_hook('third_hook'); } add_action( 'first_hook', 'first_hook_function' ); //add_action( 'second_hook', 'second_hook_function' ); //add_action( 'third_hook', 'third_hook_function' ); function first_hook_function(){ //code to run takes 2 minutes. //sends output as email to me for inspection } function second_hook_function(){ //code to run takes 3 minutes. //sends output as email to me for inspection } function third_hook_function(){ //code to run takes 4 minutes. //sends output as email to me for inspection } 

PS Надеюсь, я следил за всем правильным форматом, это мой первый пост!

Изменить: Чтобы прояснить мои вопросы, можно ли запустить эти (от 2 до 4 минут) функции из одного и того же плагина с помощью метода wp-cron?

Solutions Collecting From Web of "Несколько заданий wp_schedule_event cron в плагине вызывают многократное выполнение"

В целом использование Alternative Cron является более надежным. Я попытался сделать демонстрацию, используя ваш примерный код, в качестве основы, чтобы воспроизвести увиденное:

 <?php /* * Plugin Name: Overlapping Cron Test * Author: futuernorn */ register_activation_hook(__FILE__,'cron_activation'); register_deactivation_hook(__FILE__,'cron_deactivation'); function cron_activation(){ wp_schedule_event(time()+30, 'daily', 'first_hook'); wp_schedule_event(time()+60, 'hourly', 'second_hook'); wp_schedule_event(time()+90, 'hourly', 'third_hook'); } function cron_deactivation(){ wp_clear_scheduled_hook('first_hook'); wp_clear_scheduled_hook('second_hook'); wp_clear_scheduled_hook('third_hook'); } add_action( 'first_hook', 'first_hook_function' ); add_action( 'second_hook', 'second_hook_function' ); add_action( 'third_hook', 'third_hook_function' ); function first_hook_function(){ //code to run takes 2 minutes. //sends output as email to me for inspection sleep(30); $crontest_data = get_option( '_crontest_data' ); $crontest_data[] = 'first_hook_completed: '.date('Ymd H:i:s'); update_option('_crontest_data', $crontest_data); } function second_hook_function(){ //code to run takes 3 minutes. //sends output as email to me for inspection\ sleep(60); $crontest_data = get_option( '_crontest_data' ); $crontest_data[] = 'second_hook_completed: '.date('Ymd H:i:s'); update_option('_crontest_data', $crontest_data); } function third_hook_function(){ //code to run takes 4 minutes. //sends output as email to me for inspection sleep(90); $crontest_data = get_option( '_crontest_data' ); $crontest_data[] = 'third_hook_completed: '.date('Ymd H:i:s'); update_option('_crontest_data', $crontest_data); } 

Благодаря обычной функциональности wp-cron на месте и надуманному набору одновременного трафика, мы видим только одну запись за cron:

 testsite$ wp plugin activate crontest Success: Plugin 'crontest' activated. testsite$ for i in {1..10}; do curl -b -s $WEBSITE_URL 1>/dev/null; done testsite$ for i in {1..10}; do curl -s $WEBSITE_URL 1>/dev/null; done testsite$ wp option get _crontest_data array ( 0 => 'first_hook_completed: 2015-11-09 19:49:25', 1 => 'second_hook_completed: 2015-11-09 19:50:25', 2 => 'third_hook_completed: 2015-11-09 19:51:55', ) 

Поскольку я не могу воспроизвести то, что вы видите, это может помочь получить немного больше информации здесь.