Сегодня утром я получил электронное письмо, в котором говорилось, что мой сайт Wordpress был автоматически обновлен до последней версии. Я знал об этой функции, но мне всегда было интересно, как именно она работает.
PHP не является постоянно запущенным процессом: он запускается только по запросу. Итак, насколько я могу судить, Wordpress может обновляться только тогда, когда кто-то загружает веб-страницу. Но процесс обновления не происходит мгновенно, поэтому пользователь, посещающий сайт, будет очень медленно загружать страницу.
Есть ли другой трюк, который они используют для автоматического обновления? Я искал повсюду, но не нашел никакого объяснения.
php
automatic-updates
DisgruntledGoat
источник
источник
Ответы:
Система, которую вы ищете здесь, называется "WP Cron". Это система фоновых процессов в WordPress, которая позволяет событиям происходить вне обычной обработки. Им все еще нужен триггер, чтобы запустить их, но они не мешают загрузке страниц из-за фонового процесса.
Так что да, кто-то должен загрузить вашу страницу. Выключенный в файле default-filters.php, вы найдете следующую строку кода:
add_action( 'init', 'wp_cron' );
Итак, при каждой загрузке страницы запускается функция wp_cron. Эта функция завершена в wp-includes / cron.php, и она проверяет запланированные события в базе данных. Если есть какие-то процессы, которые он должен запускать в фоновом режиме, он вызывает функцию spawn_cron.
Spawn cron имеет два возможных метода работы, но первым и наиболее распространенным является вызов функции wp_remote_post для установления соединения с самим собой по URL-адресу wp-cron.php. Делая этот дополнительный HTTP-запрос, он запускает другой процесс PHP, чтобы выполнить всю реальную работу. Запрос, который он делает здесь, является неблокирующим, с таймаутом 0,01 секунды. Таким образом, это не дает никаких результатов. Цель запроса - просто запустить новый процесс в фоновом режиме. После того, как это сделано, он просто возвращается, так что у пользователя просмотра никогда не возникает никаких задержек.
Процесс wp-cron.php - это то, что выполняет реальную работу, обновление и все остальное. Многие процессы в WordPress обрабатываются системой cron. Запланированная публикация после публикации, обработка пингов, проверка обновлений, все, что должно происходить вне обычного потока, может быть запланировано и затем выполнено по мере необходимости.
Но да, нормальное попадание на сайт действительно должно произойти, чтобы начать процесс. И нет, WordPress.org не связывается с вашим сайтом напрямую, чтобы начать работу, ваш сайт должен получать некоторую форму трафика, чтобы запустить его. Подойдет любая форма трафика.
источник
На самом деле, автоматическое обновление выталкивается из
wp.org
. Процесс обновления все еще выполняется на вашем сайте, но в фоновом режиме черезwp-cron
.Когда выходит новое незначительное обновление, ребята из WordPress начинают выкатывать это обновление. Фактический процесс обновления начинается после того, как ваш сайт проверил
wp.org
наличие обновлений, обновление теоретически доступно, и ваш сайт выбран случайным образом для обновления.Поскольку каждый сайт проверяет
wp.org
наличие новых версий (обычно дважды в деньwp-cron
), сервер развертывания знает, сколько сайтов нуждается в обновлении.Затем начинается развертывание, которое начинается медленно - 1 из 128 сайтов обновляется автоматически. Это отслеживается, и если успешное завершение указывает на отсутствие проблем с развертыванием, все больше сайтов получают автоматическое обновление (обычно следующим шагом будет 1 из 64 и продолжит увеличиваться таким образом), пока все автоматические обновления не будут доставлены.
Это позволяет разработчикам остановить развертывание, если возникнут какие-либо проблемы, но при последнем обновлении с
3.8
до3.8.1
100% успеха.Сайты, выбранные на
1 out of 128
самом деле случайные. Ну, не совсем, но если вы хотите знать, это работает так:URL сайта, нуждающегося в обновлении, хэшируется с помощью
MD5
. Используя только первые три символа этого хэша и конвертируя егоbase10
, получается 4096 возможностей. Обновление началось для сайтов с расчетным числом от 0 до 31 (4096/32 = 128).Хорошо, я думаю, это довольно случайно;)
В моем случае, когда я запускаю много сайтов WordPress, обновления заняли 1 день - было довольно забавно видеть, когда все страницы были обновлены.
На всякий случай вам было интересно: D
Кстати, вот статья на make.wordpress.org, описывающая процесс, как он произошел.
источник
В самых общих чертах, когда пользователь посещает сайт, WordPress проверяет истечение таймера и, если истечение обнаруживается, на сервер отправляется другой запрос на «выполнение» действий, связанных с событием с истекшим сроком действия. Вот почему пользователь не чувствует заметной задержки при загрузке страницы, так как сервер выполняет фактическое действие (в данном случае обновление) в отдельном процессе.
Это работает, но время не очень точное. Чем больше трафика у вашего сайта, тем точнее он будет.
Люди, которые хотят получить более высокую производительность и более точную синхронизацию, могут заблокировать встроенный WordPress «процесс» cron и использовать процесс cron ОС для запуска проверки таймеров.
источник