wordpress cron
TRANSCRIPT
![Page 1: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/1.jpg)
WordPress Cron
Владимир Скляр, WordCamp Russia 2014
![Page 2: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/2.jpg)
![Page 3: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/3.jpg)
Операционные системы
● Windows
Планировщик задач (Тask scheduler)
● Linux
cron — повторяющиеся задачи
at — одиночные задачи
![Page 4: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/4.jpg)
Планировщики задач ОС
Планировщик Конфигурация
![Page 5: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/5.jpg)
![Page 6: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/6.jpg)
Задачи в ядре WordPress
● Проверка обновлений● плагинов● тем● ядра
● Удаление записей из корзины
● Удаление автосохранений
Одиночные Повторяющиеся
● Публикация запланированных записей
● Отправка пингов
![Page 7: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/7.jpg)
![Page 8: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/8.jpg)
Абстракная схема планировщика WordPress
Планировщик–
/wp-cron.php
Конфигурация
–Cron API
wp_options cron→
Запускпланировщика
![Page 9: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/9.jpg)
Работа планировщика WordPress в деталях
init
wp_cron()
spawn_cron()
...
/wp-cron.php
...
http
![Page 10: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/10.jpg)
Возможные проблемы
● Низкая посещаемость– запуск с помощью планировщика ОС
● Высокая посещаемость– планировщик старается максимально исключить возможность
выполнения одной задачи несколькими процессами одновременно
WP_CRON_LOCK_TIMEOUT = 60 секунд
![Page 11: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/11.jpg)
http://wordpress.org/plugins/wp-missed-schedule/
Плагин «WP Missed Schedule»
![Page 12: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/12.jpg)
Запуск через Linux Cron
// wp-config.php
define('DISABLE_WP_CRON', true);
# crontab -e
*/15 * * * * wget -q -O – "http://example.com/wp-cron.php" > /dev/null 2>&1
crontab-generator.org
corntab.com
![Page 13: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/13.jpg)
Альтернативный режим запуска
init
wp_cron()
spawn_cron()
include ''wp-cron.php'';
...
http://example.com/?wp_doing_cron
![Page 14: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/14.jpg)
Альтернативный режим запуска
// wp-config.php
define( 'ALTERNATE_WP_CRON' , true );
![Page 15: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/15.jpg)
Запуск с помощью сторонних сервисов
● EasyCron - https://www.easycron.com/– плагин - http://wordpress.org/plugins/easycron/
● SetCronJob - https://www.setcronjob.com/
● ...
![Page 16: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/16.jpg)
Cron API
/wp-includes/cron.php
![Page 17: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/17.jpg)
action
callback
callback
callback
callback
![Page 18: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/18.jpg)
Одиночные задачи
wp_schedule_single_event(time() + 3600, // время запуска"hook_name", // имя событияarray( $arg1, $arg2, $arg3 ) // аргументы
);
add_action( "hook_name", "hook_callback" , 10, 3 );function hook_callback ( $arg1, $arg2, $arg3 ) {
// код задачи}
![Page 19: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/19.jpg)
Повторяющиеся задачи
wp_schedule_event( time() + 60, // время первого запуска "hourly", // имя интервала "hook_name", // имя события array( $arg1, $arg2, $arg3 ) // аргументы);
add_action( "hook_name", "hook_callback", 10, 3 );function hook_callback ( $arg1, $arg2, $arg3 ) { // код задачи}
![Page 20: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/20.jpg)
Задача Интервалвыполнения
![Page 21: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/21.jpg)
Интервалы повторяемых задач
["hourly"] => [ ["interval"] => 3600, ["display"] => "Каждый час", ],
["daily"] => [ ["interval"] => 86400, ["display"] => "Каждый день", ],
["twicedaily"] => [ ["interval"] => 43200, ["display"] => "Два раза в день", ]
![Page 22: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/22.jpg)
Создание пользовательских интервалов
add_filter( "cron_schedules" , "add_custom_cron_interval" );
function add_custom_cron_interval ( $intervals ) {
$intervals["weekly"] = array( "interval" => WEEK_IN_SECONDS, "display" => "Каждую неделю", );
return $intervals;}
![Page 23: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/23.jpg)
Повторяющиеся задачи
wp_schedule_event( time() + 60, // время первого запуска "hourly", // имя интервала "hook_name", // имя события array( $arg1, $arg2, $arg3 ) // аргументы);
add_action( "hook_name", "hook_callback", 10, 3 );function hook_callback ( $arg1, $arg2, $arg3 ) { // код задачи}
![Page 24: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/24.jpg)
Удаление задач
wp_unschedule_event()wp_clear_scheduled_hook()
![Page 25: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/25.jpg)
Плагины
WP Crontrol
http://wordpress.org/plugins/wp-crontrol/
![Page 26: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/26.jpg)
![Page 27: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/27.jpg)
Плагины
Debug Bar Cron - http://wordpress.org/plugins/debug-bar-cron/
WP-CLI - http://wp-cli.org/
![Page 28: Wordpress Cron](https://reader034.vdocuments.net/reader034/viewer/2022042518/557e2cc8d8b42a807e8b4f68/html5/thumbnails/28.jpg)
Multisite