WordPress zamanlanmış görevleri neden gecikir? WP-Cron çalışma modeli
WP-Cron sürekli çalışan bir sistem görevi değildir. Zamanı gelen görevler sonraki sayfa yüklemesinde çalışabildiği için düşük trafikli sitelerde gecikme görülebilir.

Zamanlanmış bir yazının beklenen saatte yayımlanmaması veya rutin bir işlemin ancak siteye biri girdikten sonra tamamlanması kafa karıştırıcı olabilir. Bu durum her zaman görevin kaybolduğu anlamına gelmez. WordPress, bu tür işleri WP-Cron adlı kendi zamanlama mekanizmasıyla yönetir ve bu mekanizmanın çalışma anı sitenize gelen sayfa yüklemelerine bağlıdır. Bu nedenle özellikle seyrek ziyaret edilen sitelerde, saat tam olarak geldiğinde görev çalışmayabilir. Bu yazı, gecikmenin nedenini WP-Cron’un çalışma modeline göre ayırt etmenize yardım eder. Amaç rastgele ayar değiştirmek değil; görevin ne zaman tetiklenebildiğini anlamak ve yalnızca zaman hassasiyeti gerekiyorsa sistem görev zamanlayıcısını değerlendirmektir.

Kısa özet
- WP-Cron, WordPress’te zamana bağlı görevleri planlar; zamanlanmış yazı yayımlama ve güncelleme denetimleri buna örnektir.
- WP-Cron sürekli çalışmaz: görev listesini sayfa yüklemeleri sırasında kontrol eder.
- Siteye uzun süre sayfa yüklenmezse zamanı gelen görevler gecikebilir; bunlar sonraki fırsatta kuyruğa göre çalışır.
- Zamanı kritik görevler için sistem görev zamanlayıcısının wp-cron.php dosyasına düzenli web isteği göndermesi değerlendirilebilir.
- Sistem zamanlayıcısı kullanılırsa, gereksiz sayfa yüklemesi tetiklemelerini önlemek için WP-Cron devre dışı bırakma adımı ayrıca ele alınmalıdır.
WP-Cron nedir ve hangi işleri etkiler?
WP-Cron, WordPress’in zamana bağlı görevlerin zamanlanmasını yöneten mekanizmasıdır. WordPress çekirdeğinde güncelleme denetimleri ve zamanlanmış yazıların yayımlanması gibi özellikler WP-Cron’dan yararlanır. Bu nedenle sorun yalnız içerik takviminizde görünmeyebilir; zamana bağlı başka bir WordPress işlemi de beklediğiniz anda gerçekleşmeyebilir.
Cron sözcüğü, belirli zamanlarda iş çalıştırma fikrini anlatır. Ancak WP-Cron’un davranışı, sunucu işletim sistemindeki sürekli çalışan sistem zamanlayıcısıyla aynı değildir. Gecikmeyi doğru yorumlamak için bu ayrımı baştan yapmak gerekir.
- Zamanlanmış yazı yayımlama WP-Cron kullanan çekirdek işlerden biridir.
- Güncelleme denetimleri de WP-Cron kullanan çekirdek özellikler arasındadır.
Kaynak: [1]
Gecikmenin temel nedeni: tetikleme sayfa yüklemesinde olur
WP-Cron, her sayfa yüklemesinde zamanlanmış görevler listesini kontrol eder. Çalışma zamanı gelmiş görevler bu sayfa yüklemesi sırasında çağrılır. Başka bir deyişle WP-Cron sürekli açık bekleyen bağımsız bir sistem işlemi değildir; bir sayfa yüklemesiyle tetiklenir.
Örnek senaryo: Bir yazı saat 14:00 için planlanmış olsun. Sitede 14:00 ile 17:00 arasında hiçbir sayfa yüklemesi gerçekleşmezse WordPress belgelerine göre zamanlama hataları oluşabilir. Bu örnekte görülen gecikme, görevin 14:00’te kontrol edilmesini sağlayacak tetikleyicinin olmamasıyla açıklanır.
Bu nedenle teşhis için ilk soru şudur: Görevin planlandığı zaman ile görevin fark edildiği zaman arasında siteye bir sayfa yüklemesi geldi mi? Yanıt hayırsa, WP-Cron’un sayfa yüklemesine bağlı çalışma biçimi makul bir açıklamadır.
- WP-Cron her sayfa yüklemesinde görev listesini denetler.
- Zamanı gelen görevler o sayfa yüklemesi sırasında çağrılır.
- WP-Cron sürekli çalışmadığından, ziyaretin seyrek olduğu sitelerde zamanlama gecikebilir.
Kaynak: [1]
Geciken görevler kaybolur mu?
WordPress belgelerine göre WP-Cron’da zamanlanmış görevler kuyruğa alınır ve sonraki fırsatta çağrılır; varsayılan çalışma modelinde bu fırsat sonraki sayfa yüklemesidir.
Bu ayrım, gecikmiş bir zamanlanmış yazıyı ya da başka bir planlı işlemi değerlendirirken yararlıdır. Sayfa yüklemesi sonrasında görevin çalışması, WP-Cron’un kuyruğa alınmış işi sonraki fırsatta ele almasıyla uyumlu olabilir. Buna karşılık, zamanında çalışma zorunluluğu olan bir süreç için yalnızca sonraki ziyaretçiyi beklemek uygun bir işletim tercihi olmayabilir.
- WP-Cron’da planlanmış görevler kuyruğa alınır.
- Kuyruktaki görevler sonraki fırsatta, yani sonraki sayfa yüklemesinde çalışır.
Kaynak: [1]
Ne zaman sistem görev zamanlayıcısı düşünülmeli?
WordPress belgeleri, tam zamanında çalışması gereken kritik görevler için sistem görev zamanlayıcısının kullanılabileceğini belirtir. Bu yaklaşımda sunucunun zamanlayıcısı, istediğiniz aralıkta veya belirli bir zamanda wp-cron.php dosyasına web isteği gönderecek şekilde ayarlanır. Böylece WP-Cron’un tetiklenmesi yalnız ziyaretçi sayfa yüklemelerine bağlı kalmaz.
Bu, her gecikmede uygulanacak otomatik bir çözüm değildir. Önce görevin gerçekten zaman hassas olup olmadığını ve sitenizin sistem zamanlayıcısını yönetebileceğiniz bir ortamda bulunup bulunmadığını değerlendirin. Zamanı kritik değilse gecikmenin düşük trafikle ilişkili olduğunu anlamak yeterli olabilir. Zamanı kritikse sistem zamanlayıcısının aralığını ya da belirli çalışma saatini görevin ihtiyacına göre planlamak daha uygun olabilir.
macOS ve Linux, zaman tabanlı zamanlama için cron kullanır. Belgelerde her 15 dakikada bir çalıştırma biçimi */15 * * * * command olarak gösterilir. Buradaki command, çalıştırılacak komutu temsil eder; gerçek komutu ve sunucunuzun erişim yöntemini kendi ortamınıza göre doğrulayın.
- Kritik görevler için sistem zamanlayıcısı wp-cron.php dosyasına web isteği gönderebilir.
- Zamanlayıcı istenen aralıkta veya belirli bir saatte kurulabilir.
- macOS ve Linux cron biçiminde her 15 dakikada bir çalıştırma tanımlanabilir.
Kaynak: [2]
Sistem zamanlayıcısı kurulduğunda yapılacak ek ayar
Sistem zamanlayıcısı wp-cron.php çağrısını düzenli yapacak şekilde kurulduktan sonra WordPress, varsayılan durumda WP-Cron’u sayfa yüklemelerinde de çalıştırmayı sürdürür. WordPress belgeleri bunun artık gerekli olmadığını ve sunucuda ek kaynak kullanımına katkıda bulunacağını belirtir.
Bu nedenle sistem zamanlayıcısı yaklaşımını uygulayanlar, WP-Cron’u wp-config.php dosyasında devre dışı bırakma adımını ayrıca ele almalıdır. Belgelerde, DISABLE_WP_CRON sabitinin true değeriyle tanımlanması gösterilir. Bu ayar, sistem zamanlayıcısının yerine geçmeden tek başına uygulanmamalıdır; çünkü WP-Cron’un sayfa yüklemesiyle tetiklenmesini kapatır.
Web isteği için wget kullanmayı seçerseniz, belgeler wget komutunda –delete-after seçeneğinin kullanılabildiğini gösterir. Bu seçenek olmadan wget, HTTP GET isteğinin çıktısını kaydeder. Canlı yapılandırmada kullanılacak çağrının kendi site adresinize ve sunucu ortamınıza uygun olduğunu doğrulayın.
- Sistem zamanlayıcısı sonrasında WP-Cron’un sayfa yüklemelerinde de çalışması ek kaynak kullanımına katkıda bulunur.
- WP-Cron, wp-config.php içindeki DISABLE_WP_CRON ayarıyla devre dışı bırakılabilir.
- wget çağrısında –delete-after kullanılmazsa HTTP GET çıktısı kaydedilir.
Kaynak: [2]
Gecikmeyi teşhis etmek için sakin bir sıra izleyin
Önce geciken işlemin gerçekten WordPress tarafından zamanlanmış bir görev olup olmadığını belirleyin. Zamanlanmış yazı ve güncelleme denetimi, belgelerde WP-Cron kullanan örneklerdir. Ardından görev saatini ve bu saatten sonra gerçekleşen ilk sayfa yüklemesini not edin. Görev ilk yüklemeden sonra çalışıyorsa bu gözlem WP-Cron’un belgelenen kuyruk ve tetikleme modeliyle tutarlıdır.
Sonra işin zaman hassasiyetini açıkça tanımlayın. Bir işlemin birkaç saat sonra çalışması kabul edilebiliyorsa, sayfa yüklemesine bağlı çalışma modelini bilmek operasyonel planlama için yeterli olabilir. Belirli aralıkta ya da belirli saatte tetiklenmesi gerekiyorsa, sistem görev zamanlayıcısının wp-cron.php için düzenli istek göndermesi değerlendirilir.
Son olarak iki mekanizmanın aynı anda nasıl davranacağını unutmayın. Sistem zamanlayıcısını kullanmaya karar verirseniz WordPress’in sayfa yüklemelerinde WP-Cron’u çalıştırmayı sürdürmesini ve bunun ek kaynak kullanımına katkısını hesaba katın. Devre dışı bırakma ayarını ancak haricî zamanlayıcı kurulduktan sonra uygulayın.
- Görevin planlanan saatini ve sonraki ilk sayfa yüklemesini karşılaştırın.
- İşin gecikmeye toleransını belirleyin.
- Zaman hassas görevlerde sistem zamanlayıcısını değerlendirin.
- Haricî zamanlayıcı kurulduysa WP-Cron’un sayfa yüklemesiyle çalışmasını ayrıca yönetin.
Uygulama kontrol listesi
- Geciken işlemin WordPress’te zamanlanmış bir görev olup olmadığını belirleyin.
- Planlanan saat ile sonraki ilk sayfa yüklemesi arasındaki süreyi kontrol edin.
- Görevin gecikmeye toleransını netleştirin.
- Zamanı kritik görevler için sistem görev zamanlayıcısının wp-cron.php isteğini değerlendirin.
- Sistem zamanlayıcısı kurulduysa WP-Cron’un sayfa yüklemelerinde çalışmasını sürdürmenin ek kaynak kullanımını dikkate alın.
- WP-Cron’u devre dışı bırakacaksanız bunu haricî zamanlayıcı kurulduktan sonra wp-config.php ayarıyla yapın.
- wget kullanıyorsanız çıktının kaydedilmesini istemiyorsanız –delete-after seçeneğini dikkate alın.
WP-Cron gecikmesinin temel açıklaması çoğu zaman basittir: WordPress, zamanı gelen işleri sürekli çalışan bir işlemle değil, sayfa yüklemesiyle tetikler. Bu nedenle düşük trafikli bir sitede planlı işlem sonraki ziyaretle çalışabilir. Göreviniz belirli bir zamanda veya aralıkta çalışmak zorundaysa sistem görev zamanlayıcısı wp-cron.php isteğini düzenli başlatabilir. Bu geçiş yapılırsa yinelenen sayfa yüklemesi tetiklemelerini önlemek için WP-Cron’un yapılandırmasını da birlikte ele alın.
Sık sorulan sorular
WP-Cron neden tam saatinde çalışmayabilir?
WP-Cron sürekli çalışmaz. Her sayfa yüklemesinde görev listesini denetler ve zamanı gelen görevleri bu yükleme sırasında çağırır. Görev saati ile sonraki sayfa yüklemesi arasında boşluk varsa gecikme oluşabilir.
WP-Cron geciken bir görevi yeniden dener mi?
WordPress belgelerine göre WP-Cron’da zamanlanmış görevler kuyruğa alınır ve sonraki fırsatta, yani sonraki sayfa yüklemesinde çağrılır.
WP-Cron’u ne zaman devre dışı bırakmalıyım?
Sistem görev zamanlayıcısını wp-cron.php dosyasına düzenli web isteği gönderecek biçimde kurduktan sonra değerlendirilmelidir. Bu durumda WordPress’in her sayfa yüklemesinde WP-Cron çalıştırmayı sürdürmesi gereksiz olabilir ve ek kaynak kullanımına katkıda bulunur.
Kaynaklar
[1] Cron – Plugin Handbook | Developer.WordPress.org
[2] Hooking WP-Cron Into the System Task Scheduler – Plugin Handbook | Developer.WordPress.org

