Otomatik güncellemeler tam olarak nasıl çalışır?


28

Bu sabah Wordpress sitemin en son sürüme otomatik olarak güncellendiğini bildiren bir e-posta aldım. Bu özelliği biliyordum ama her zaman tam olarak nasıl çalıştığını merak ettim.

PHP sürekli çalışan bir işlem değildir: yalnızca istendiğinde çalışır. Söyleyebileceğim kadarıyla, Wordpress yalnızca biri bir web sayfasını yüklediğinde kendini güncelleyebilir. Ancak güncelleme işlemi anlık değildir, bu yüzden kesinlikle siteyi ziyaret eden bir kullanıcı gerçekten yavaş bir sayfa yüküne sahip olacaktır.

Otomatik güncellemeler için kullandıkları farklı bir numara var mı? Her yeri aradım ama bir açıklama bulamadım.


Kesin olmak gerekirse, yalnızca yeni bir küçük veya güvenlik güncellemesi yayınlandığında, örneğin 3.8'den 3.8.1'e kadar, ancak 3.9 piyasaya sürüldüğünde (ana sürüm güncellemesi olarak), o zaman manuel olarak yapmanız gerekecektir.
Borek

Yanıtlar:


15

PHP sürekli çalışan bir işlem değildir: yalnızca istendiğinde çalışır. Söyleyebileceğim kadarıyla, Wordpress yalnızca biri bir web sayfasını yüklediğinde kendisini güncelleyebilir. Ancak güncelleme işlemi anlık değildir, bu yüzden kesinlikle siteyi ziyaret eden bir kullanıcı gerçekten yavaş bir sayfa yüküne sahip olacaktır.

Otomatik güncellemeler için kullandıkları farklı bir numara var mı? Her yeri aradım ama bir açıklama bulamadım.

Burada aradığınız sistemin adı "WP Cron". Olayların normal işlemenin dışında gerçekleşmesine izin veren WordPress'teki bir arka plan işlem sistemidir. Onları atmak için hala bir tetikleyiciye ihtiyaçları var, ancak arka plan işlemlerinden dolayı sayfa yüklemelerini engellemiyorlar.

Yani evet, birileri sayfanızı doldurmalı. Default-filters.php dosyasında, bu kod satırını bulacaksınız:

add_action( 'init', 'wp_cron' );

Böylece, her sayfa yüklemesinde, wp_cron işlevi çalışır. Bu işlev wp-include / cron.php dosyasında sona ermektedir ve veritabanındaki zamanlanmış olayları kontrol etmenin ne yaptığıdır. Arka planda çalışması gereken herhangi bir işlem varsa, spawn_cron işlevini çağırır.

Spawn cron'un iki olası çalışma yöntemi vardır, ancak ilk ve en yaygın olanı wp_remote_post işlevini wp-cron.php URL'sinde kendi kendine bir bağlantı kurmak için çağırmaktır. Bu ekstra HTTP isteğini yaparak, tüm fiili işi yapmak için başka bir PHP işlemi başlatır. Burada yaptığı istek, 0,01 saniye zaman aşımı ile engellenmez. Yani, aslında burada herhangi bir sonuç almaz. İsteğin amacı, arka planda yeni bir işlem başlatmaktır. Bu yapıldıktan sonra, basitçe geri döner, böylece görüntüleyen kullanıcının hiçbir gecikmesi olmaz.

Wp-cron.php işlemi asıl işi, güncellemeyi ve diğer her şeyi yapar. WordPress'teki birçok işlem cron sistemi tarafından gerçekleştirilir. Planlanmış yayınlama, işleme pings, güncelleme kontrolleri, normal akış dışında olması gereken her şey planlanabilir ve daha sonra gerektiğinde çalıştırılabilir.

Ama evet, siteye normal bir vuruş gerçekten süreci başlatmak için gerçekleşmesi gerekir. Ve hayır, WordPress.org işleri başlatmak için doğrudan sitenizle bağlantı kurmuyor, sitenizi başlatmak için bir tür trafik almak zorunda. Her türlü trafik olur.


17

Aslında, otomatik güncelleme itilir wp.org. Güncelleme işlemi hala sitenizde çalışır, ancak arka planda wp-cron.

Yeni bir küçük güncelleme yayınlandığında, WordPress'teki çocuklar güncellemeyi başlatmaya başlar. Gerçek güncelleme işlemi, siteniz wp.orggüncellemeleri kontrol ettikten sonra başlatılır , güncellemeler teorik olarak kullanılabilir ve siteniz güncellenmek üzere rastgele seçilir.


(Yanlış ifademi gösterdiğiniz için teşekkür ederiz @ot :))


Her site wp.orgyeni sürümleri kontrol ettiğinden (genellikle günde iki kez kullanılır wp-cron), rolloutserver kaç sitenin bir güncellemeye ihtiyacı olduğunu bilir.

Ardından, dağıtım yavaş bir şekilde başlar - 128 siteden 1'i otomatik olarak güncellenir. Bu izlenir ve eğer başarılı bir sonuç çıkma ile ilgili herhangi bir sorun çıkmazsa, sitelerin çoğu otomatik güncellemeyi alır (genellikle bir sonraki adım 64'te 1 olur ve bu şekilde artmaya devam eder) tüm otomatik güncellemeler teslim edilinceye kadar.

Herhangi bir sorun oluşursa bu sunumu durdurmak için geliştiricileri sağlar, ancak son güncelleme 3.8için 3.8.1% 100 başarı oranı var.

Tarafından seçilen siteler 1 out of 128aslında rastlantısaldır. Şey, tam olarak değil, ama bilmek istiyorsanız, şunun gibi çalışır:

Güncellemeye ihtiyaç duyan sitenin URL’si kullanılarak karma hale getirilir MD5. Bu karma değerin sadece ilk üç karakterini kullanmak ve onu dönüştürmek base10, bu 4096 olasılıkla sonuçlanır. Güncelleme, 0 ile 31 arasında hesaplanan bir sayıya sahip siteler için başlamıştır (4096/32 = 128).

Tamam, sanırım sonuçta oldukça rastgele;)

Benim durumumda, çok fazla WordPress sitesi çalıştırdığım için güncellemeler 1 gün sürdü - tüm sayfaların ne zaman güncellendiğini görmek oldukça komikti.

Sadece merak ediyorsan diye: D

btw, işte make.wordpress.org sitesinde, süreci olduğu gibi anlatan bir makale.


"Wp.org'dan sitenize bir istek tarafından başlatıldı" ise, bu nasıl güvenlidir? Sitenize hiç kimse istek gönderemedi mi?
DisgruntledGoat

Aslında, bunun teknik olarak nasıl yapıldığını bilmiyorum. Ancak bir güvenlik sorunu ve / veya isteğin nereden geldiği gibi güvenlik kontrolleri olduğundan eminim.
fischi

1
@fischi wp.org'un güncellemeyi başlattığı bilgisini aldınız mı? Güncellemeyi başlatan wp.org veya güncellemeleri kontrol eden wordpress sitesi ile wp.org güncellemeler olduğunu söylerse güncellemeyi başlatmak arasında büyük bir fark var.
kraftner

1
Bu cevap aslında yanlıştır. Güncelleme işlemi WordPress.org tarafından sitenize başlatılmamıştır. Sitenizin gerçekten tekmelemek için bir tür trafik olmasına gerek yok, ancak WordPress.org sitenizi doğrudan atmıyor.
Otto

1
Tamam, ancak "wp.org'dan sitenize bir istekle başladım" yanlıştır. Siteniz güncelleme isteğinde bulunur ve yanıt size güncelleme olup olmadığını bildirir. Bu başka bir yol değil, sitenizin işlemi başlatması gerekiyor.
Otto

1

Çok geniş bir ifadeyle, bir kullanıcı siteyi ziyaret ettiğinde wordpress zamanlayıcı son kullanma tarihini kontrol eder ve bir son kullanma süresi tespit edilirse , süresi dolmuş olayla ilişkili eylemleri "çalıştırmak" için sunucuya başka bir istek gönderilir. Bu nedenle, sunucu fiili eylemi (bu durumda yükseltme) ayrı bir işlemde gerçekleştirdiğinden, kullanıcının sayfa yüklenmesinde gözle görülür bir gecikme hissetmemesi gerekir.

Bu işe yarıyor ama zamanlaması pek doğru değil. Siteniz ne kadar fazla trafik alıyorsa o kadar doğru olacaktır.

Daha iyi performans ve daha doğru zamanlama almak isteyen insanlar, dahili cron "process" wordpress'ini engelleyebilir ve zamanlayıcıların kontrolünü tetiklemek için OS cron işlemini kullanabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.