Comment fonctionnent exactement les mises à jour automatiques?

26

J'ai reçu un email ce matin indiquant que mon site Wordpress avait été mis à jour automatiquement avec la dernière version. Je connaissais cette fonctionnalité, mais je me suis toujours demandé comment elle fonctionnait.

PHP n'est pas un processus permanent: il ne s'exécute que sur demande. Donc, autant que je sache, Wordpress ne peut se mettre à jour que lorsque quelqu'un charge une page Web. Toutefois, le processus de mise à jour n’est pas instantané. Un utilisateur visitant le site aurait donc un chargement de page très lent.

Existe-t-il une astuce différente pour les mises à jour automatiques? J'ai cherché partout mais je n'ai trouvé aucune explication.

    
posée DisgruntledGoat 27.01.2014 - 11:32
la source

3 réponses

14
  

PHP n'est pas un processus permanent: il ne s'exécute que sur demande.   Donc, autant que je sache, Wordpress ne peut se mettre à jour que lorsque quelqu'un   charge une page Web. Mais le processus de mise à jour n’est pas instantané, donc   un utilisateur visitant le site aurait sûrement un chargement de page très lent.

     

Existe-t-il une astuce différente pour les mises à jour automatiques? J'ai   cherché partout mais n'ont trouvé aucune explication.

Le système que vous recherchez ici s'appelle "WP Cron". C'est un système de traitement en arrière-plan dans WordPress qui permet aux événements de se produire en dehors du traitement normal. Ils ont encore besoin d’un déclencheur pour les lancer, mais ils n’interfèrent pas avec le chargement de pages en raison du processus en arrière-plan.

Alors oui, quelqu'un doit charger votre page. Dans le fichier default-filters.php, vous trouverez cette ligne de code:

add_action( 'init', 'wp_cron' );

Ainsi, à chaque chargement de page, la fonction wp_cron est exécutée. Cette fonction est terminée dans wp-includes / cron.php et vérifie les événements planifiés dans la base de données. S'il y a des processus à exécuter en arrière-plan, il appelle la fonction spawn_cron.

Spawn cron a deux méthodes de fonctionnement possibles, mais la première et la plus courante consiste à appeler la fonction wp_remote_post pour établir une connexion avec lui-même, à l’URL de wp-cron.php. En faisant cette requête HTTP supplémentaire, il lance un autre processus PHP pour effectuer tout le travail réel. La demande qu'il fait ici est non bloquante, avec un délai d'attente de 0,01 seconde. Donc, cela ne donne aucun résultat ici. Le but de la demande est simplement de démarrer un nouveau processus en arrière-plan. Une fois que cela est fait, il retourne simplement, de sorte que l'utilisateur qui visualise n'a jamais de retard.

Le processus wp-cron.php définit le travail réel, la mise à jour et tout le reste. Beaucoup de processus dans WordPress sont gérés par le système cron. Après publication, traitement des pings, vérifications des mises à jour programmées, tout ce qui doit se passer en dehors du flux normal peut être planifié puis exécuté selon les besoins.

Mais oui, un succès normal sur le site doit effectivement arriver pour lancer le processus. Et non, WordPress.org ne contacte pas directement votre site pour lancer des actions, votre site doit recevoir une certaine forme de trafic pour le démarrer. Toute forme de trafic fera l'affaire.

    
réponse donnée Otto 21.11.2014 - 11:10
la source
16

En fait, la mise à jour automatique est poussée de wp.org . Le processus de mise à jour est toujours actif sur votre site, mais en arrière-plan via wp-cron .

Quand une nouvelle mise à jour mineure est publiée, les utilisateurs de WordPress commencent à déployer la mise à jour. Le processus de mise à jour proprement dit est lancé après que votre site ait vérifié les mises à jour de wp.org , une mise à jour est théoriquement disponible et votre site est choisi par hasard pour être mis à jour.

  

(Merci @otto pour avoir signalé ma mauvaise formulation :))

Alors que chaque site vérifie avec wp.org les nouvelles versions (généralement deux fois par jour à l'aide de wp-cron ), le serveur de rollouts sait combien de sites nécessitent une mise à jour.

Ensuite, le déploiement commence lentement - 1 site sur 128 est mis à jour automatiquement. Cette situation est surveillée et si le taux de réussite n'indique aucun problème lors du déploiement, la mise à jour automatique est générée sur un plus grand nombre de sites (généralement, l'étape suivante est 1 sur 64 et continue d'augmenter de la sorte) jusqu'à ce que toutes les mises à jour automatiques soient livrées.

Cela permet aux développeurs d’arrêter le déploiement en cas de problème, mais le taux de réussite de la dernière mise à jour de 3.8 à 3.8.1 est de 100%.

Les sites sélectionnés par 1 out of 128 sont réellement aléatoires. Pas vraiment, mais si vous voulez savoir, cela fonctionne comme suit:

L'URL du site nécessitant une mise à jour est hachée à l'aide de MD5 . En utilisant uniquement les trois premiers caractères de ce hachage et en le convertissant en base10 , vous obtenez 4096 possibilités. La mise à jour a démarré pour les sites dont le nombre calculé est compris entre 0 et 31 (4096/32 = 128).

D'accord, je suppose que c'est plutôt aléatoire après tout;)

Dans mon cas, comme je gère beaucoup de sites WordPress, les mises à jour ont pris une journée - était assez drôle à voir quand toutes les pages ont été mises à jour.

Juste au cas où vous vous le demandiez: D

btw, ici est un article sur make.wordpress.org décrivant le processus, comme il est arrivé.

    
réponse donnée fischi 27.01.2014 - 12:25
la source
1

En termes très généraux, lorsqu'un utilisateur visite le site, wordpress vérifie l'expiration du délai et si une expiration est détectée, une autre requête est envoyée au serveur pour "exécuter" les actions associées à l'événement ayant expiré. . C'est pourquoi l'utilisateur ne ressent aucun retard notable dans le chargement de la page, car le serveur exécute l'action réelle (mise à niveau dans ce cas) dans un processus séparé.

Cela fonctionne mais le timing n’est pas très précis. Plus le trafic de votre site est important, plus il sera précis.

Les personnes qui souhaitent obtenir de meilleures performances et un minutage plus précis peuvent bloquer le "processus" interne de cron que Wordpress a et utiliser le processus cron du système d’exploitation pour déclencher la vérification des minuteries.

    
réponse donnée Mark Kaplun 27.01.2014 - 11:55
la source

Lire d'autres questions sur les étiquettes