Intereting Posts
как я могу сменить папки для загрузки в% год% /% месяц% /% день%? добавить фильтр в «меню быстрого редактирования» в wordpress admin Пользовательская Галерея HTML работает только при прикреплении изображений к сообщению / странице Как проверить, является ли пользовательский ввод в поле в настройке номером? Есть ли плагин, который позволяет мне сохранять дополнительный невидимый контент за сообщение? Как экспортировать только некоторые страницы на другой существующий сайт WordPress, который использует другую тему без стиля разрыва? Divi Child Тема не отображается в «Темы» Извлечение инициалов комментатора на веб-сайте WordPress Шаблон страницы с именованием имен боковых панелей? Переопределить библиотеку jquery ui по умолчанию с более новой версией странная ошибка короткого кода: действительно ли короткие коды требуют какой-либо зависимости? Разделение базы данных улучшит производительность? Синтаксис Подсветка плагинов и 3.2.1 Проблемы с доступом к таблицам стилей / скриптам, загружаемым в заголовок WP wp_editor не сохраняет данные и текстовую область, отображающую html-теги

Несколько заданий 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', ) 

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