WordPress'te "cron" denince çoğu kişi sunucudaki gerçek zamanlayıcıyı düşünür. Oysa WP-Cron bir zamanlayıcı değildir. Ziyaretçi geldiğinde çalışan bir kontroldür.
WP-Cron nasıl çalışır?
Her sayfa yüklemesinde WordPress, zamanı gelmiş bir görev olup olmadığına bakar. Varsa arka planda wp-cron.php dosyasına bir istek gönderir ve görevleri o istek çalıştırır. Bu yaklaşım, cron'a erişimi olmayan paylaşımlı hostinglerde bile çalışsın diye seçilmiş.
Bedeli şu iki durumda ortaya çıkar:
- Az ziyaretçili site: Gece 03:00'te ziyaretçi yoksa, 03:00'e zamanlanmış yedek de çalışmaz. Sabah ilk gelen ziyaretçiyle çalışır. Zamanlanmış yazılar "Zamanlama kaçırıldı" uyarısı verir.
- Çok ziyaretçili site: Her ziyarette yapılan bu kontrol ve aynı anda tetiklenen
wp-cron.phpistekleri gereksiz yük oluşturur. Ağır bir görev ziyaretçinin sayfasını yavaşlatabilir.
Ek olarak, sunucunun kendine HTTP isteği atamadığı durumlarda (güvenlik duvarı, yanlış DNS, HTTP kimlik doğrulaması) WP-Cron hiç çalışmaz.
Gerçek cron'a geçiş
Adım 1: WP-Cron'un sayfa yüklemesinde tetiklenmesini kapatın
wp-config.php içinde, "stop editing" satırının üstüne:
define( 'DISABLE_WP_CRON', true );
Bu satır görevleri iptal etmez. Yalnızca ziyaretçi isteklerinin onları tetiklemesini durdurur.
Adım 2: Sunucuya bir cron görevi ekleyin
En sağlıklı yöntem WP-CLI'dir, çünkü HTTP katmanına hiç uğramaz:
*/5 * * * * cd /home/kullanici/public_html && /usr/local/bin/wp cron event run --due-now --quiet
WP-CLI yoksa PHP ile doğrudan çalıştırabilirsiniz:
*/5 * * * * cd /home/kullanici/public_html && /usr/bin/php wp-cron.php >/dev/null 2>&1
Panelinizde yalnızca URL çağırma imkânı varsa son çare olarak:
*/5 * * * * curl -s https://ornek.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Görevi sitenin dosya sahibiyle çalıştırın, root ile değil. Aksi hâlde cron'un oluşturduğu dosyalar root'a ait olur ve WordPress daha sonra onlara yazamaz.
Adım 3: Doğrulayın
wp cron event list
Bu komut zamanı gelen görevleri ve bir sonraki çalışma zamanlarını gösterir. Beş dakika bekleyip tekrar baktığınızda "next run" sütunu ilerlemiş olmalı. WP-CLI yoksa WP Crontrol gibi bir eklentiyle panelden aynı listeyi görebilirsiniz.
Kaç dakikada bir?
Çoğu site için 5 dakika idealdir. E-posta kuyruğu ya da stok senkronizasyonu gibi sık işleri olan e-ticaret sitelerinde 1 dakika kullanılabilir. 15 dakikadan seyrek bir aralık ise zamanlanmış yazıların gecikmesine yol açar.
Çoklu site (multisite) notu
Multisite kurulumlarda her alt sitenin kendi görev listesi vardır. Tek bir cron satırı yalnızca ana siteyi çalıştırır. Tüm siteler için:
*/5 * * * * cd /yol && for u in $(wp site list --field=url); do wp cron event run --due-now --url="$u" --quiet; done
Bu küçük değişiklik, "bazen çalışıyor bazen çalışmıyor" denen işlerin büyük kısmını ortadan kaldırır. Bir de sunucu yükü düşer.
Yorumlar
Henüz yorum yok. İlk yorumu siz yazın.