自动更新究竟是如何工作的?

时间:2014-01-27 作者:DisgruntledGoat

我今天早上收到一封电子邮件,说我的Wordpress网站已经自动更新到最新版本。我知道这个功能,但我一直想知道它到底是如何工作的。

PHP不是一个永久运行的进程:它只在请求时运行。据我所知,Wordpress只能在有人加载网页时进行自我更新。但是更新过程并不是即时的,因此访问该网站的用户肯定会有一个非常慢的页面加载。

他们是否有不同的技巧用于自动更新?我找遍了这个地方,但没有找到任何解释。

3 个回复
最合适的回答,由SO网友:Otto 整理而成

PHP不是一个永久运行的进程:它只在请求时运行。据我所知,Wordpress只能在有人加载网页时进行自我更新。但是更新过程并不是即时的,因此访问该网站的用户肯定会有一个非常慢的页面加载。

他们是否有不同的技巧用于自动更新?我找遍了这个地方,但没有找到任何解释。

您在这里寻找的系统称为“WP Cron”。它是WordPress中的后台处理系统,允许事件在正常处理之外发生。它们仍然需要一个触发器来启动,但它们不会因为后台进程而干扰页面加载。

所以是的,必须有人加载你的页面。在默认过滤器中禁用。php文件,您会发现以下代码行:

add_action( \'init\', \'wp_cron\' );

因此,在每次页面加载时,wp\\u cron函数都会运行。此功能在wp includes/cron中结束。php,它所做的是检查数据库中的计划事件。如果有任何进程需要在后台运行,则调用函数spawn\\u cron。

Spawn cron有两种可能的操作方法,但第一种也是最常见的方法是调用wp\\u remote\\u post函数,在wp cron的URL上建立回自身的连接。php。通过发出这个额外的HTTP请求,它将启动另一个PHP进程来完成所有实际工作。它在这里发出的请求是非阻塞的,超时为0.01秒。所以,它实际上没有得到任何结果。请求的目的只是在后台启动一个新流程。完成后,它会简单地返回,因此查看用户不会有任何延迟。

wp cron。php过程是实际工作、更新和其他一切的基础。WordPress中的许多进程都是由cron系统处理的。计划的后期发布、处理ping、更新检查,以及需要在正常流程之外发生的任何事情都可以进行计划,然后根据需要运行。

但是,是的,对网站的正常点击一定会启动这个过程。不,WordPress。org不会直接联系您的站点来启动它,您的站点必须接收某种形式的流量才能启动它。任何形式的交通都可以。

SO网友:fischi

实际上,自动更新是从wp.org. 更新过程仍在您的站点上运行,但在后台通过wp-cron.

当一个新的次要更新发布时,WordPress的人员开始发布更新。The actual update process is started after your site checked wp.org for updates, an update is theoretically available, and your site is chosen by random to be updated.

(谢谢你@otto指出我的错误措辞:)


每个站点都检查wp.org 对于新版本(通常每天使用两次wp-cron), rolloutserver知道有多少站点需要更新。

然后,该卷展开始,开始缓慢-128个站点中有1个自动更新。这一点正在被监控,如果成功率表明推出没有问题,更多的站点会得到自动更新(通常下一步是64个站点中的1个,并继续以这种方式增加),直到所有自动更新都交付为止。

这使开发人员能够在出现任何问题时停止卷展,但是3.83.8.1 成功率为100%。

1 out of 128 实际上是随机的。嗯,不是真的,但如果你想知道,它是这样工作的:

需要更新的站点的Url使用MD5. 仅使用此哈希的前三个字符并将其转换为base10, 这导致了4096种可能性。已为计算出的数字介于0和31之间(4096/32=128)的站点启动更新。

好吧,我想这毕竟是非常随机的;)

在我的情况下,因为我运行了很多WordPress网站,更新花了1天时间——很有趣,当所有页面都更新时。

万一你想知道:D

顺便提一下here 是一篇关于制造的文章。wordpress。描述过程的组织,正如它发生的那样。

SO网友:Mark Kaplun

从广义上讲,当用户访问站点时,wordpress会检查计时器是否过期以及是否检测到过期another 请求被发送到服务器以“运行”与过期事件关联的操作。这就是为什么当服务器在一个单独的进程中运行实际操作(本例中为升级)时,用户不会感到页面加载有任何明显的延迟。

这是可行的,但计时不是很准确。你的网站流量越大,它就越准确。

想要获得更好的性能和更准确的计时的人可以阻止wordpress的内部cron“进程”,并使用OS cron进程触发计时器的检查。

结束

相关推荐

为什么幻灯片放映(使用JQuery FlexSlider制作)在我从函数.php加载时不能工作,但如果我从footer.php文件中加载就可以了?

我有以下情况:我将这个纯HTML主题(使用引导CSS框架)带入WordPress主题。这是原始的纯HTML演示主题(我有完整的源代码,因为这是一个可下载的示例):http://www.html.it/guide/img/bootstrap/demo/home.html这是我个人正在研究的WP主题:http://onofri.org/WP_BootStrap/正如您所看到的,与最初的演示网站和我的个人WP主题唯一的区别是,在第二个演示中,标题中的幻灯片(使用flexslider JQuery插件制作)没有显