Upload
versusbassz
View
490
Download
0
Embed Size (px)
Citation preview
WordPress Cron
Владимир Скляр, WordCamp Russia 2014
Операционные системы
● Windows
Планировщик задач (Тask scheduler)
● Linux
cron — повторяющиеся задачи
at — одиночные задачи
Планировщики задач ОС
Планировщик Конфигурация
Задачи в ядре WordPress
● Проверка обновлений● плагинов● тем● ядра
● Удаление записей из корзины
● Удаление автосохранений
Одиночные Повторяющиеся
● Публикация запланированных записей
● Отправка пингов
Абстракная схема планировщика WordPress
Планировщик–
/wp-cron.php
Конфигурация
–Cron API
wp_options cron→
Запускпланировщика
Работа планировщика WordPress в деталях
init
wp_cron()
spawn_cron()
...
/wp-cron.php
...
http
Возможные проблемы
● Низкая посещаемость– запуск с помощью планировщика ОС
● Высокая посещаемость– планировщик старается максимально исключить возможность
выполнения одной задачи несколькими процессами одновременно
WP_CRON_LOCK_TIMEOUT = 60 секунд
http://wordpress.org/plugins/wp-missed-schedule/
Плагин «WP Missed Schedule»
Запуск через 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
Альтернативный режим запуска
init
wp_cron()
spawn_cron()
include ''wp-cron.php'';
...
http://example.com/?wp_doing_cron
Альтернативный режим запуска
// wp-config.php
define( 'ALTERNATE_WP_CRON' , true );
Запуск с помощью сторонних сервисов
● EasyCron - https://www.easycron.com/– плагин - http://wordpress.org/plugins/easycron/
● SetCronJob - https://www.setcronjob.com/
● ...
Cron API
/wp-includes/cron.php
action
callback
callback
callback
callback
Одиночные задачи
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 ) {
// код задачи}
Повторяющиеся задачи
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 ) { // код задачи}
Задача Интервалвыполнения
Интервалы повторяемых задач
["hourly"] => [ ["interval"] => 3600, ["display"] => "Каждый час", ],
["daily"] => [ ["interval"] => 86400, ["display"] => "Каждый день", ],
["twicedaily"] => [ ["interval"] => 43200, ["display"] => "Два раза в день", ]
Создание пользовательских интервалов
add_filter( "cron_schedules" , "add_custom_cron_interval" );
function add_custom_cron_interval ( $intervals ) {
$intervals["weekly"] = array( "interval" => WEEK_IN_SECONDS, "display" => "Каждую неделю", );
return $intervals;}
Повторяющиеся задачи
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 ) { // код задачи}
Удаление задач
wp_unschedule_event()wp_clear_scheduled_hook()
Плагины
WP Crontrol
http://wordpress.org/plugins/wp-crontrol/
Плагины
Debug Bar Cron - http://wordpress.org/plugins/debug-bar-cron/
WP-CLI - http://wp-cli.org/
Multisite