WordPress wp-cron.php: zamanlanmış görevler çalışmıyor ya da sunucuyu yoruyor
Zamanlanmış bir yazı saatinde yayınlanmadı. Yedek eklentisi gece çalışmadı. Mağazanızda sipariş mailleri geç geliyor. Bunların ortak sebebi WP-Cron'dur. WordPress zamanlanmış işleri gerçek bir sistem zamanlayıcısıyla değil, siteye her ziyaretçi geldiğinde "zamanı gelen iş var mı" diye bakarak çalıştırır. Siteniz az ziyaret alıyorsa işler gecikir; çok ziyaret alıyorsa her istekte bu kontrol yapıldığı için gereksiz yük oluşur.
Çözüm: wp-cron'u kapatıp gerçek cron kullanın
Gerçek cron, ziyaretçiden bağımsız olarak belirli aralıkla çalışır. İki adım var.
1. Ziyaretçiyle tetiklemeyi kapatın
wp-config.php dosyasında "That's all, stop editing" satırından önce şunu ekleyin:
define('DISABLE_WP_CRON', true);
2. Gerçek zamanlayıcı ekleyin
VDS'te (SSH ile): crontab -e ile her 5 dakikada WordPress'in cron'unu çalıştırın. En hafif yöntem sunucunun kendi PHP'siyle çalıştırmaktır:
*/5 * * * * cd /var/www/ornek.com && /usr/bin/php wp-cron.php > /dev/null 2>&1
Dosya sahibi farklıysa komutu o kullanıcının crontab'ına koyun (sudo crontab -u www-data -e). WP-CLI kuruluysa şu da çalışır: */5 * * * * cd /var/www/ornek.com && wp cron event run --due-now > /dev/null 2>&1.
Hosting paketinde panelde CRON bölümüne gidin, Cron Görevi Ekle'ye tıklayın, dakika alanına */5 yazıp diğer alanları * bırakın ve komut olarak şunu girin (kullanıcı adınızı ve alan adınızı kendi bilgilerinizle değiştirin):
php /home/KULLANICI/web/ornek.com/public_html/wp-cron.php
Hosting'de PHP komut satırı yolu farklı olabilir; çalışmazsa curl -s https://ornek.com/wp-cron.php > /dev/null komutunu deneyin. Paketinizdeki cron görevi sınırı vardır (10 görev). Genel cron kullanımı için cron makalesine bakın.
Çalıştığını nasıl görürüm?
- WP-CLI ile bekleyen işleri listeleyin:
wp cron event list. "Sonraki çalışma" geçmişte kalan ve birikmiş işler görüyorsanız cron çalışmıyor demektir. - "WP Crontrol" gibi bir eklenti tüm zamanlanmış işleri yönetim panelinde gösterir.
- Zamanlanmış bir yazıyı birkaç dakika sonrasına ayarlayıp yayınlanmasını izleyin.
Sık sorunlar
- Cron çalışıyor ama iş yapılmıyor: Görevin kendisi hatalıdır.
debug.log'a bakın: hata günlüğü. - Siteniz bakım modunda ya da giriş gerektiren bir koruma arkasında: HTTP ile çağırılan
wp-cron.phpengellenir; PHP ile doğrudan çalıştırmak bundan etkilenmez. - Çok sayıda iş birikmiş ve sunucu yoruluyor: Sebep çoğu zaman bir eklentinin sürekli iş üretmesidir; Query Monitor ya da WP Crontrol ile hangi eklentiden geldiğini bulun.
Sunucu yükünü azaltmak için ayrıca önbellek kurmanız gerekir.
Sık sorulanlar
DISABLE_WP_CRON açık ama gerçek cron eklemedim, ne olur?
Hiçbir zamanlanmış iş çalışmaz: yazı zamanlama, otomatik güncelleme, yedek, mail sıraları durur. İkisini birlikte yapın.
Her dakika çalıştırmalı mıyım?
Çoğu site için 5 dakika yeterlidir. Çok hassas zamanlama gereken siteler 1 dakika yapabilir, ama bu hosting paketindeki işlemci kotasını kullanır.
WP-Cron hiç mi kullanılmamalı?
Küçük, az ziyaretçili bir sitede varsayılan hâliyle sorun çıkarmaz. Zamanlama hassasiyeti ya da yük sorunu yaşıyorsanız gerçek cron'a geçin.
İlgili makaleler
- Zamanlanmış görev (cron) nasıl eklenir?
- WordPress yavaş açılıyor: nedenini bulun ve hızlandırın
- Hosting'de veritabanı (MySQL) nasıl oluşturulur? phpMyAdmin nasıl açılır?
Sorununuz çözülmediyse destek talebi açın. Hangi adımı denediğinizi ve ekranda ne gördüğünüzü yazarsanız çözüm çok daha hızlı olur.
Geri bildiriminiz için teşekkürler!