WordPress sitelerde zamanlanmış görevlerin (yazı zamanlama, yedekleme, e-posta kuyrukları, WooCommerce sipariş durumları vb.) kalbi wp-cron mekanizmasıdır. Ancak varsayılan olarak çalışan bu sistem, özellikle orta ve büyük projelerde hem performans hem de güvenilirlik tarafında ciddi sorunlar çıkarabiliyor. Ziyaretçi olmadığında tetiklenmeyen görevler, yüksek trafikte sitenizi yoran yoğun cron çağrıları ve “Missed schedule” hataları; sahada sık sık karşımıza çıkan şikâyetler arasında.
Bu yazıda, WordPress’te wp-cron devre dışı bırakma adımlarını ve yerine gerçek sistem cron job kurulumunu cPanel ve VPS ortamları için adım adım anlatacağız. Amaç, hem paylaşımlı hosting’de hem de kendi VPS’inizde zamanlanmış görevlerinizi daha öngörülebilir, performanslı ve izlenebilir hale getirmek. Özellikle WooCommerce, üyelik siteleri, LMS ve içerik yoğun projeler yönetiyorsanız; doğru cron mimarisi, uptime ve kullanıcı deneyimi açısından düşündüğünüzden çok daha kritik.
DCHost tarafında WordPress ortamlarını tasarlarken, cron yapılandırmasını her zaman mimarinin bir parçası olarak ele alıyoruz. Bu rehberde, aynısını kendi siteniz için nasıl yapabileceğinizi, riskleri nasıl azaltacağınızı ve ileride ölçek büyüdüğünde sorunsuz devam edebilmeniz için hangi pratikleri benimsemeniz gerektiğini birlikte netleştireceğiz.
İçindekiler
- 1 WordPress’te wp-cron Nedir, Neden Sorun Olur?
- 2 Ne Zaman wp-cron’u Devre Dışı Bırakmalısın?
- 3 wp-cron’u Güvenli Şekilde Devre Dışı Bırakma
- 4 cPanel’de Gerçek Cron Job Kurulumu
- 5 VPS Üzerinde Cron Job Kurulumu (SSH ile)
- 6 Gelişmiş: wp-cron Çakışmaları, wp-cli ve flock Kullanımı
- 7 Kurulum Sonrası Kontroller ve İzleme
- 8 DCHost Altyapısında wp-cron ve Doğru Planlama
- 9 Özet ve Sonraki Adım: Cron’u Rayına Oturt, Geri Kalanı Otomatize Et
WordPress’te wp-cron Nedir, Neden Sorun Olur?
WordPress’in içinde çalışan wp-cron.php, klasik Linux cron’a benzer şekilde zamanlanmış işleri yürütmek için tasarlanmış bir uygulama içi zamanlayıcıdır. Ama arada önemli bir fark var: Gerçek cron gibi dakikaya bağlı, sistem seviyesinde değil; her HTTP isteğinde “acaba cron çalışmalı mı?” diye kontrol eden bir mekanizma.
Bu şu anlama gelir:
- Bir ziyaretçi siteye girdiğinde WordPress, wp-cron’u tetikleyip tetiklememesi gerektiğini kontrol eder.
- Zamanı gelmiş bir görev varsa, arka planda wp-cron.php’ye bir istek atar ve görevleri işletmeye çalışır.
Küçük sitelerde bu tasarım çalışır; ancak trafik ve görev sayısı arttıkça dezavantajlar ortaya çıkar:
- Düşük trafikte cron hiç tetiklenmeyebilir; planlanan gönderiler yayınlanmaz, üyelik hatırlatma e-postaları gitmez, WooCommerce kuyrukları gecikir.
- Yüksek trafikte ise neredeyse her istekte wp-cron kontrolü yapılır. Bu da PHP ve veritabanı yükünü gereksiz şekilde artırır, TTFB ve genel yanıt sürelerini şişirir.
- Yoğun görevlerde (büyük yedekleme, toplu e-posta, yoğun WooCommerce siparişleri) wp-cron süreçleri uzun sürer, bazen PHP zaman aşımına takılır.
- İzlenebilirlik zayıftır; görevlerin gerçekten çalışıp çalışmadığını sistem seviyesinde loglamak ve alarm üretmek daha zahmetlidir.
Bu yüzden üretim ortamında WordPress kurarken, özellikle DCHost gibi profesyonel altyapılarda, wp-cron’u devre dışı bırakıp gerçek sistem cron kullanmak neredeyse bir “temel hijyen” maddesi haline gelmiş durumda.
Ne Zaman wp-cron’u Devre Dışı Bırakmalısın?
Her WordPress sitesinde ilk günden wp-cron’u kapatmak şart değil; ama bazı senaryolarda er ya da geç bu adımı atacaksınız. DCHost’ta karşılaştığımız tipik örnekler:
- WooCommerce mağazalar: Sipariş durum güncellemeleri, stok senkronizasyonu, kupon süreleri ve raporlama için cron yoğun kullanılır. Geç çalışan cron = hatalı stok, gecikmiş bildirimler.
- Üyelik / LMS platformları: Abonelik yenileme hatırlatmaları, otomatik üyelik düşürme, ödev bildirimleri ve sertifika üretimi gibi işler cron’a bağlıdır.
- İçerik siteleri ve haber portalları: Zamanlanmış yazılar (“Missed schedule” kabusu), RSS senkronizasyonu, sosyal medya otomasyonu.
- Yoğun yedekleme ve maintenance eklentileri: İç yedekleme, veritabanı temizlik işleri çoğu zaman wp-cron üzerinden tetiklenir.
Eğer sitenizde şu belirtileri görüyorsanız, artık wp-cron devre dışı bırakma ve gerçek cron’a geçme zamanınız gelmiş demektir:
- Yönetim panelinde “Missed schedule” hataları veya zamanında yayınlanmayan yazılar.
- Yoğun saatlerde artan CPU kullanımı ve yavaşlayan site.
- WooCommerce sipariş e-postalarının bazen gelmesi, bazen gecikmesi.
- Loglarda veya izleme araçlarında tekrarlayan wp-cron.php istekleri.
WordPress performansını daha geniş bir çerçevede ele almak istersen, WordPress için sunucu tarafı optimizasyon rehberimizi de mutlaka okumanı öneririz. Cron sadece parçanın biri; PHP-FPM, OPcache, Redis ve MySQL ayarlarıyla birlikte ele alındığında gerçek farkı görüyorsun.
wp-cron’u Güvenli Şekilde Devre Dışı Bırakma
1. Yedek al
Basit bir değişiklik olsa da, wp-config.php dosyasına dokunacağımız için öncesinde:
- Dosya yöneticisinden veya FTP/SFTP üzerinden wp-config.php’nin bir kopyasını indir,
- Mümkünse cPanel veya VPS üzerinde dosya sistemi snapshot / yedek al.
DCHost müşterileri için cPanel veya VPS’te otomatik yedekleme senaryolarını 3-2-1 yedekleme stratejisi rehberimizde detaylı anlatmıştık; benzer bir yaklaşımı burada da uygulayabilirsin.
2. wp-config.php içine DISABLE_WP_CRON ekle
Site dosyalarına ya cPanel Dosya Yöneticisi ile ya da FTP/SFTP üzerinden bağlan. WordPress kök dizininde (genelde public_html veya domain dizinin) wp-config.php dosyasını bul ve düzenle.
Aşağıdaki satırı, genellikle wp-config.php’de bulunan şu satırın hemen üstüne ekle:
/* Hepsi bu kadar, düzenlemeyi bırakın! Mutlu bloglamalar. */
Eklenmesi gereken kod:
define( 'DISABLE_WP_CRON', true );
Son hali kabaca şöyle görünebilir:
define( 'DB_COLLATE', '' );
define( 'DISABLE_WP_CRON', true );
/* Hepsi bu kadar, düzenlemeyi bırakın! Mutlu bloglamalar. */
Değişikliği kaydettiğinde, WordPress artık ziyaretçi trafiğiyle kendi kendine cron çalıştırmayı bırakır. Bu noktadan sonra mutlaka gerçek cron job kurmalısın; yoksa zamanlanmış tüm görevler pasif kalır.
cPanel’de Gerçek Cron Job Kurulumu
DCHost paylaşımlı hosting veya cPanel’li sunucu kullanıyorsan, sistem cron job’larını yönetmenin en kolay yolu cPanel arayüzüdür. Aşağıdaki adımlar tüm cPanel sürümleri için küçük görsel farklarla geçerlidir.
- DCHost müşteri panelinden cPanel’ine giriş yap.
- cPanel arama çubuğuna Cron Jobs yaz veya Gelişmiş bölümü altında Cron Jobs bağlantısını bul.
- Açılan ekranda zamanlanmış görevleri ekleyebileceğin bir form göreceksin.
2. Çalıştırma sıklığını belirle
Çoğu WordPress sitesi için pratik aralıklar:
- Standart blog / kurumsal site: 15 dakikada bir
- Aktif WooCommerce / üyelik sitesi: 5 dakikada bir
- Aşırı yoğun, cron’a çok bağımlı özel uygulamalar: 1-2 dakikada bir (kaynaklarını dikkate alarak)
cPanel’de “Common Settings” kısmından “Once per 5 minutes” gibi hazır seçenekleri kullanabilir veya manuel cron ifadesi yazabilirsin. Örneğin 5 dakikada bir için:
*/5 * * * *
3. Komut: wp-cron.php’yi URL üzerinden tetikleme
En basit ve uyumlu yöntem, cron’un site URL’si üzerinden wp-cron.php’yi çağırmasıdır. Bunun için curl veya wget kullanabiliriz. Örneğin:
*/5 * * * * curl -s https://seninsiten.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
cPanel formunda “Command” alanına yukarıdaki komutu yazman yeterli. Açıklama:
- curl -s: Sessiz modda HTTP isteği yapar.
- https://seninsiten.com/wp-cron.php?doing_wp_cron: WordPress cron tetikleme URL’si.
- >/dev/null 2>&1: Çıktı ve hata loglarını çöpe atar (mail kutunu şişirmez).
HTTPS ve alan adını kendi sitene göre değiştirmeyi unutma. Eğer WordPress alt dizinde kuruluysa, örneğin:
https://seninsiten.com/blog/wp-cron.php?doing_wp_cron
4. PHP-CLI üzerinden wp-cron.php çalıştırmak (isteğe bağlı)
Bazı durumlarda HTTP yerine doğrudan PHP yorumlayıcısı ile wp-cron.php çalıştırmak isteyebilirsin (özellikle HTTP erişimi kısıtlıysa veya firewall arkasındaysa). Bu durumda komut kabaca şöyle olur:
*/5 * * * * /usr/local/bin/php -q /home/KULLANICI/public_html/wp-cron.php >/dev/null 2>&1
Burada dikkat etmen gerekenler:
- /usr/local/bin/php yolu sunucuna göre değişebilir. DCHost cPanel sunucularında genelde bu veya benzer bir yol kullanılır; tam yolu cPanel içindeki PHP Selector veya destek ekibimizden öğrenebilirsin.
- /home/KULLANICI/public_html kısmını kendi kullanıcı adın ve WordPress dizinine göre güncelle.
HTTP çağrısına göre biraz daha teknik bir yöntemdir ama özellikle güvenlik ve firewall kısıtları olan ortamlarda işe yarar.
5. Birden fazla WordPress sitesi için cron
Aynı cPanel hesabında birden çok WordPress kurulumun varsa (örneğin bir ana alan adı ve birkaç alt alan adı), her site için ayrı cron job tanımlayabilirsin:
*/5 * * * * curl -s https://site1.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
*/5 * * * * curl -s https://site2.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Bu yaklaşımda her sitenin zamanlanmış görevleri bağımsız ve düzenli şekilde çalışır.
VPS Üzerinde Cron Job Kurulumu (SSH ile)
VPS veya dedicated sunucu kullanıyorsan, cPanel olmasa bile Linux cron ile WordPress wp-cron’larını kontrol altına alabilirsin. DCHost VPS ürünlerinde genellikle SSH erişimi standarttır; aşağıdaki adımlar Debian/Ubuntu ve CentOS/AlmaLinux gibi yaygın dağıtımlar için geçerlidir.
1. SSH ile sunucuya bağlan
Yerel makinen üzerinden SSH istemcisi (Terminal, PuTTY vb.) kullanarak bağlantı kur:
ssh kullanici@sunucu-ip-adresi
Root kullanıcısı veya WordPress dosyalarının sahibi kullanıcı ile bağlanman gerekir. Güvenli SSH için ayrı bir rehbere ihtiyacın varsa, VPS’te SSH güvenliği rehberimize göz atabilirsin.
2. Kullanıcı bazlı crontab aç
Çoğu senaryoda root crontab yerine ilgili kullanıcı crontab’i kullanmak daha sağlıklıdır. Örneğin WordPress dosyalarının sahibi webuser ise:
crontab -e
veya kullanıcı değiştirip:
sudo -u webuser crontab -e
Komut sonrası editör (nano, vim vb.) açılacak.
3. wp-cron’u HTTP ile tetiklemek
En basit örnek, cPanel’dekiyle aynı mantığı kullanmak:
*/5 * * * * curl -s https://seninsiten.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Birden fazla site varsa hepsi için ayrı satır ekleyebilirsin:
*/5 * * * * curl -s https://site1.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
*/5 * * * * curl -s https://site2.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
4. wp-cron.php’yi PHP-CLI ile çalıştırmak
Eğer HTTP erişimi güvenlik nedeniyle kısıtlıysa veya iç ağda çalışan bir WordPress’in varsa, doğrudan PHP-CLI ile dosyayı çalıştırmak daha uygundur:
*/5 * * * * /usr/bin/php -q /var/www/seninsiten.com/public_html/wp-cron.php >/dev/null 2>&1
Burada:
- /usr/bin/php yolunu
which phpkomutuyla doğrula. - /var/www/seninsiten.com/public_html yolunu kendi dizin yapına göre düzenle.
5. systemd timer ile daha gelişmiş kurulum (opsiyonel)
Modern Linux dağıtımlarında systemd timer kullanarak cron yerine daha gelişmiş zamanlayıcılar kurmak mümkün. Özellikle:
- Başarısız olduğunda yeniden deneme (restart on failure),
- Log’ların journal üzerinden merkezi yönetimi,
- Bağımlılık ve öncelik mekanizmaları
gibi avantajları var. Eğer VPS seviyesinde detaylı bir mimari kuruyorsan, cron mu systemd timer mı yazımızda bu iki yaklaşımı ayrıntılı karşılaştırdık. Büyük WordPress kümelerinde (örneğin çoklu WooCommerce kurulumları) systemd timer ile wp-cron yönetimi oldukça şık bir çözüm oluyor.
Gelişmiş: wp-cron Çakışmaları, wp-cli ve flock Kullanımı
Yoğun görevleri olan sitelerde en sık gördüğümüz sorunlardan biri, cron görevlerinin üst üste binmesi. Örneğin 5 dakikada bir çalışan cron’un, önceki görevler henüz bitmeden tekrar tetiklenmesi.
wp-cli ile cron çalıştırmak
Sunucunda wp-cli varsa, WordPress cron kuyruğunu daha kontrollü şekilde yönetebilirsin. Örnek komut:
*/5 * * * * cd /var/www/seninsiten.com/public_html && /usr/bin/wp cron event run --due-now --path=/var/www/seninsiten.com/public_html >/dev/null 2>&1
Açıklama:
- wp cron event run –due-now: Zamanı gelmiş tüm cron event’lerini tek seferde çalıştırır.
- –path: WordPress dizinini belirtir (bazı ortamlarda gerekli).
flock ile tek seferde tek işlem garantisi
Aynı cron komutunun üst üste binmesini engellemek için Linux’un flock mekanizmasını kullanabilirsin. Örnek:
*/5 * * * * flock -n /tmp/wp-cron.lock /usr/bin/php -q /var/www/seninsiten.com/public_html/wp-cron.php >/dev/null 2>&1
Burada:
- flock -n /tmp/wp-cron.lock: /tmp/wp-cron.lock dosyası üzerinden kilit oluşturur. Kilit varsa komut çalışmaz; çakışma önlenir.
- -n: Kilit alınamazsa beklemek yerine hemen çık.
Yoğun WooCommerce sitelerinde bu tür bir kilitleme, cron’un aynı anda iki kez çalışıp veritabanı üzerinde yarış koşullarına girmesini engeller.
Kurulum Sonrası Kontroller ve İzleme
wp-cron’u devre dışı bırakıp gerçek cron job kurduktan sonra, her şeyin yolunda olduğundan emin olmak için birkaç basit kontrol yapmalısın.
1. WordPress yönetiminden kontrol
- Yeni bir yazıyı 5-10 dakika sonrasına zamanla, belirlediğin cron aralığının ardından gerçekten yayınlanıyor mu bak.
- WooCommerce kullanıyorsan test siparişi ver; sipariş maili, stok güncellemesi ve sipariş durum geçişlerinde gecikme var mı gözlemle.
- Yedekleme veya bakım eklentilerinin loglarını incele; görevler doğru saatlerde çalışıyor mu kontrol et.
2. Cron logları ve hata ayıklama
VPS ortamında cron çıktısını bir log dosyasına yönlendirmek hata ayıklamayı kolaylaştırır. Örneğin:
*/5 * * * * curl -s https://seninsiten.com/wp-cron.php?doing_wp_cron >/var/log/wp-cron.log 2>&1
Bir süre sonra bu log dosyasını inceleyerek bağlantı hatası, zaman aşımı gibi problemleri tespit edebilirsin. Daha kurumsal senaryolarda ise cron sonuçlarını Prometheus, Grafana, Loki gibi izleme yığınlarına taşımak mantıklı. Başlangıç için VPS izleme ve uyarı rehberimizi inceleyebilirsin.
3. Kaynak kullanımı ve performans ölçümü
Doğru yapılandırılmış cron, hem CPU hem de bellek tarafında daha öngörülebilir bir yük profili yaratır. Ziyaretçi trafiğinden bağımsız şekilde, belirli aralıklarla kısa süreli yük artışları görürsün. Bunu:
- top, htop gibi araçlarla canlı izleyebilir,
- VPS izleme panellerinde CPU/RAM grafiklerine yansımalarını görebilirsin.
Eğer hâlâ dalgalı ve yüksek yükler görüyorsan, cron aralığını biraz açmayı veya zaman alan görevleri daha az sıklıkla çalışacak şekilde yeniden planlamayı düşünebilirsin.
DCHost Altyapısında wp-cron ve Doğru Planlama
Cron tarafını düzenlemek, WordPress’in genel mimarisini iyileştirme yolculuğunun önemli adımlarından biri. DCHost olarak pratikte gördüğümüz şu kombinasyon, çoğu proje için çok sağlıklı bir temel sunuyor:
- Paylaşımlı hosting + cPanel cron: Küçük/orta WordPress siteleri için maliyet/performans dengesi çok iyi.
- NVMe destekli VPS + sistem cron / systemd timer: Orta ve büyük ölçekli WooCommerce, LMS, medya ve içerik platformları için ideal.
- Managed WordPress: Ekibinin sunucu tarafını yönetmekle uğraşmasını istemediğin durumlarda, cron dahil tüm altyapı ayarlarının uzmanlar tarafından yönetildiği senaryo.
Bu noktada “Ben ne zaman yönetilen hizmete geçmeliyim?” diye düşünüyorsan, Managed WordPress hosting’in ne zaman doğru seçim olduğu yazımız bu kararı netleştirmen için güzel bir kılavuz olacaktır.
Daha gelişmiş mimarilerde ise WordPress’i konteynerize edip Docker + VPS üzerinde koşturmak, cron ve diğer bakım işlerini izole şekilde yönetmeni sağlar. Böyle senaryolar için de Docker ile WordPress’i VPS’te yaşatmak rehberimizi inceleyebilirsin.
Özet ve Sonraki Adım: Cron’u Rayına Oturt, Geri Kalanı Otomatize Et
WordPress’in varsayılan wp-cron mekanizması, küçük siteler için pratik olsa da, üretim ortamında ölçek büyüdükçe hem performans hem de güvenilirlik tarafında sınırlarına çabuk ulaşıyor. Bu yazıda:
- wp-cron’un nasıl çalıştığını ve neden sorun çıkarabildiğini,
- DISABLE_WP_CRON ile uygulama içi cron’u nasıl kapatacağını,
- cPanel üzerinde gerçek cron job’ları adım adım nasıl kuracağını,
- VPS’te SSH, PHP-CLI, wp-cli ve flock gibi araçlarla daha profesyonel cron mimarilerini,
- Kurulum sonrası neleri izleyip nasıl test etmen gerektiğini
- Önce test ortamında wp-cron’u devre dışı bırakıp gerçek cron kur; birkaç gün izleyip sonra canlıya geçir.
- Sunucu tarafı ayarlarını güçlendirmek için WordPress sunucu optimizasyon rehberindeki önerileri uygula.
- VPS veya dedicated sunucu kullanıyorsan, cron işlerini izleme ve alarm sistemine bağlamak için VPS izleme ve uyarı rehberimizden faydalan.
özetledik.
Buradan sonra atabileceğin mantıklı adımlar:
Altyapını DCHost üzerinde çalıştırıyor ve “Bu cron mimarisini en doğru nasıl kurgularım?” diye düşünüyorsan, ekibimiz sana projene özel öneriler sunmaya hazır. Mevcut hosting paketini optimize etmek, uygun bir VPS’e geçmek veya tamamen yönetilen bir WordPress ortamına taşınmak istiyorsan, DCHost üzerinden bize ulaş; zamanlanmış görevlerini rayına oturtalım, sen de uygulamanın iş tarafına odaklan.
