Answers:
PHP不是一个永久运行的进程:它仅在请求时运行。据我所知,Wordpress只能在有人加载网页时进行自我更新。但是更新过程不是即时的,因此,访问该网站的用户肯定会加载非常缓慢的页面。
他们用于自动更新的技巧是否不同?我到处搜寻,但未找到任何解释。
您在这里寻找的系统称为“ WP Cron”。这是WordPress中的后台处理系统,允许事件在正常处理之外发生。他们仍然需要触发器来启动它们,但是由于后台进程,它们不会干扰页面加载。
因此,是的,必须有人加载您的页面。在default-filters.php文件中,您将找到以下代码行:
add_action( 'init', 'wp_cron' );
因此,在每次页面加载时,wp_cron函数都会运行。此功能在wp-includes / cron.php中已经结束,它的作用是检查数据库中的预定事件。如果有任何进程需要在后台运行,那么它将调用函数spawn_cron。
Spawn cron有两种可能的操作方法,但是第一种也是最常见的一种方法是在wp-cron.php的URL上调用wp_remote_post函数建立与自身的连接。通过发出此额外的HTTP请求,它将启动另一个PHP进程来完成所有实际工作。它在此处发出的请求是非阻塞的,超时为0.01秒。因此,它实际上在这里没有任何结果。请求的目的仅仅是在后台启动一个新进程。完成此操作后,它只会返回,因此查看用户永远不会有任何延迟。
wp-cron.php进程是实际工作,更新和其他所有工作。WordPress中的许多流程都由cron系统处理。可以计划排定的发布,处理ping,更新检查,以及在正常流程之外需要进行的任何事情,然后根据需要运行。
但是,是的,确实必须对站点进行正常的攻击才能启动该过程。而且,WordPress.org不会直接与您的网站联系以启动事情,您的网站必须收到某种形式的流量才能启动。任何形式的流量都可以。
实际上,自动更新是从推送的wp.org
。更新过程仍在您的网站上运行,但通过在后台进行wp-cron
。
当新的次要更新发布时,WordPress的家伙开始推出该更新。实际的更新过程在您的站点检查wp.org
更新之后开始,理论上有可用的更新,并且您的站点是随机选择进行更新的。
(感谢@otto指出我的错误措辞:))
当每个站点都在检查是否有wp.org
新版本(通常每天使用两次wp-cron
)时,rolloutserver会知道有多少站点需要更新。
然后开始缓慢地开始部署-128个站点中的1个会自动更新。这是受监视的,如果成功表明部署没有问题,则更多站点将获得自动更新(通常,下一步将是64个站点中的1个,并以这种方式继续增加),直到所有自动更新都交付为止。
这使开发人员可以在出现任何问题时停止推出产品,但是从3.8
到的最后一次更新3.8.1
成功率为100%。
所选择的网站1 out of 128
实际上是随机的。好吧,不是真的,但是如果您想知道,它的工作方式如下:
需要更新的网站网址使用进行哈希处理MD5
。仅使用此哈希的前三个字符并将其转换为base10
,就可以得到4096种可能性。已更新站点的计算数量在0到31之间(4096/32 = 128)。
好的,我想这毕竟是很随机的;)
以我为例,当我运行许多WordPress网站时,更新花费了1天的时间-很高兴看到所有页面何时更新。
万一你想知道:D
顺便说一句,这是make.wordpress.org上的一篇文章,描述了发生的过程。