JekCMS'te Zamanlanmış Yayın: Perde Arkası Nasıl Çalışır

jekcms varsayılan olarak zamanlanmış gönderiler için bir cron daemon kullanmaz — hiçbir isteğe fark edilir gecikme eklemeyen, throttle'lı, ziyaretçi tetiklemeli bir kontrole (PseudoCron) düşer. Yoğun trafikli siteler bir dakika içinde yayınlar; sessiz siteler kısa bir gecikme yaşayabilir. Bu yazı gerçek mekanizmayı ve daha sıkı garanti için geleneksel bir cron görevinin nasıl kurulacağını ele alıyor.

JekCMS'te Zamanlanmış Yayın: Perde Arkası Nasıl Çalışır

jekcms varsayılan olarak zamanlanmış gönderiler için bir cron daemon kullanmaz — hiçbir isteğe fark edilir gecikme eklemeyen, throttle'lı, ziyaretçi tetiklemeli bir kontrole (PseudoCron) düşer. Yoğun trafikli siteler bir dakika içinde yayınlar; sessiz siteler kısa bir gecikme yaşayabilir. Bu yazı gerçek mekanizmayı ve daha sıkı garanti için geleneksel bir cron görevinin nasıl kurulacağını ele alıyor.

jekcms'te zamanlanmış yayın, her sayfa render edilmeden önce satır içi çalışan bir veritabanı kontrolüne dayanmaz. PseudoCron adı verilen mekanizma aynı isteğe bağlanır ama işini yanıt ziyaretçiye zaten gönderildikten sonra yapar; sunucu destekliyorsa fastcgi_finish_request() veya litespeed_finish_request() kullanır, desteklemiyorsa (çoğunlukla mod_php) kendine bir loopback isteği atarak devreye girer. Ziyaretçi hiçbir zaman bunu beklemez. Kontrolün kendisi bir veritabanı satırı değil, cache dizinindeki küçük işaretçi dosyalarıyla 60 saniyede bire sınırlıdır; bu yüzden çoğu istek bunun için veritabanına hiç dokunmaz.

Ödün: Trafik Bağımlı Doğruluk

Ödün, ziyaretçi tetiklemeli her zamanlayıcının sahip olduğu ödünle aynı: bir süre kimse siteyi ziyaret etmezse, bir gönderinin zamanı geldi mi diye kimse bakmaz. Pratikte, düzenli trafiği olan bir sitede bu taban 60 saniyedir — sınırı belirleyen trafik değil, throttle'ın kendisidir. Sessiz bir sitede jekcms, yeni ziyaret olmasa bile kendiliğinden periyodik olarak yeniden kontrol eder (yakın zamanda bir şey zamanlanmışsa en az 5 dakikada bir); bu yüzden gerçekten hareketsiz bir sitedeki en kötü senaryo süresiz bir gecikme değil, bu aralıkta bir gecikmedir. Bu belgelenmiş bir ödün, hata değil — ve jekcms'in daha sıkı garanti isteyenler için gerçek bir cron'u da desteklemesinin nedeni tam olarak bu.

Gerçek Cron Kurmak: cron.php

jekcms, her kurulumun kök dizininde tek ve gerçek bir cron giriş noktası sunar: cron.php. Zamanlanmış gönderi yayınlamanın yanı sıra birkaç periyodik görevi daha yönetir (AI toplu iş devamı, lisans heartbeat'i). Hostunuzun crontab'ını dakikada bir buna yönlendirin:

# Crontab duzenleyiciyi ac
crontab -e

# Bu satiri ekle (her dakika)
* * * * * php /var/www/html/jekcms/cron.php >/dev/null 2>&1

# Girisi dogrula
crontab -l

cron.php çalıştığında — ister CLI'dan ister harici olarak tetiklensin — arkasında bir tazelik işareti bırakır. Bu işaret taze kaldığı sürece (yaklaşık 20 dakika içinde) PseudoCron'un ziyaretçi tetiklemeli yedeği kendini tamamen devre dışı bırakır: çalışan bir cron'a sahip bir sitede sayfa isteklerine hiçbir ek iş eklenmez. İki mekanizma, birbiriyle yarışan iki ayrı sistem değil, aynı zamanlayıcıyı tetiklemenin iki farklı yoludur.

Gerçek Gecikme Pencerenizi Ölçmek

Gerçek gecikme riskinizi sunucu erişim loglarından tahmin edebilirsiniz. Son 30 gün boyunca saat başına benzersiz istek sayısını hesaplayın. Her saat en az bir istek gösteriyorsa, gerçek cron olmadan maksimum zamanlama gecikmeniz 60 saniyedir — yoğun bir VPS'te olacağıyla aynı.

En sessiz saatleriniz — genellikle yerel saat 02:00 ile 06:00 arası — uzun ziyaretçi boşlukları gösteriyorsa, bu saatler risk pencerenizi temsil eder; periyodik kendiliğinden yeniden kontrol bunu birkaç dakikayla sınırlar, süresiz uzamasına izin vermez — ama gece birkaç dakikalık bir gecikme bile içeriğiniz için önemliyse, bu gerçek cron kurmanız gerektiğinin işaretidir.

Mekanizma Dahili Olarak Nasıl Çalışır

includes/PseudoCron.php'dan basitleştirilmiş akış:

// Bootstrap'tan her istekte cagrilir
public static function maybeSchedule(): void {
 if (PHP_SAPI === 'cli') return;

 // Gercek cron yakin zamanda calisti mi? Hicbir sey yapma.
 $real = filemtime(CACHE_PATH . '/.cron-real.flag');
 if ($real && time() - $real < 1200) return;

 // Zamani gelmemis bir sey mi var? Hicbir sey yapma.
 $next = (int) file_get_contents(CACHE_PATH . '/.cron-next-due');
 if (time() < $next) return;

 // Cok yakin zamanda mi kontrol edildi? Hicbir sey yapma (60sn taban).
 $last = filemtime(CACHE_PATH . '/.pseudo-cron.last');
 if ($last && time() - $last < 60) return;

 // Aksi halde: gercek isi ziyaretci yanitini ALDIKTAN SONRA yap.
 register_shutdown_function([self::class, 'runAfterResponse']);
}

Her şey bir dosya kilidiyle (flock) korunur; böylece iki eşzamanlı ziyaretçi aynı anda yayın geçişini tetikleyemez — ikincisi kilidin tutulduğunu görür ve hemen döner.

Yayın Sonrası Önbellek Davranışı

jekcms'te ayrı sayfa/nesne/sorgu önbellekleri değil, tek bir sayfa önbelleği katmanı vardır — Cache::flush() parametre almaz ve çağrıldığında her şeyi temizler. Pratikte bunu çoğunlukla düşünmenize gerek yok: PAGE_CACHE_LIFETIME varsayılan olarak 300 saniyedir, bu yüzden önbelleğe alınmış bir ana sayfa en kötü senaryoda bile beş dakika içinde kendiliğinden sona erer — bu da yukarıda anlatılan gecikme penceresinin rahatlıkla içindedir.

Cron Yürütmesini İzleme

cron.php kendi kalıcı log dosyasını yazmaz. CLI'dan çalıştırıldığında stdout'a kısa bir durum satırı basar; bir geçmiş istiyorsanız bunu kendiniz yönlendirin:

* * * * * php /var/www/html/jekcms/cron.php >> /home/kullanici/logs/jekcms-cron.log 2>&1

Bu log büyümeyi durdurduysa cron görevi çalışmayı bırakmış demektir — hostunuzun cron izleme özelliğiyle veya dosyanın değişiklik zamanını karşılaştıran basit günlük bir betikle kontrol edin.

Cron Erişimi Olmayan Paylaşımlı Hosting

Çoğu durumda burada hiçbir şey yapmanıza gerek yok — PseudoCron varsayılan davranıştır ve yukarıda anlatıldığı gibi zamanlamayı zaten otomatik olarak yönetir. Gerçek cron'un daha sıkı doğruluğunu isteyen ama hostu crontab'ı hiç sunmayan siteler için cron.php ayrıca kimlik doğrulamalı bir HTTP tetikleyicisi de kabul eder: ortam yapılandırmanızda bir CRON_TOKEN değeri belirleyin; eşleşen bir X-Cron-Secret başlığı içeren (sabit zamanlı karşılaştırmayla kontrol edilen) harici bir HTTP isteği, tıpkı gerçek bir cron çağrısı gibi çalıştırılmasına izin verilir. Geçerli bir token içermeyen istekler doğrudan reddedilir.

Bu, sunucu loglarınızda fark edebileceğiniz ?tick=1 ucundan farklı bir şeydir — o, PseudoCron'un kendi dahili loopback çağrısıdır, tasarım gereği kimlik doğrulamasızdır ama zararsızdır: aynı 60 saniyelik tabanla sınırlıdır ve gerçek bir cron işareti taze olduğu sürece hiçbir şey yapmaz. Dışarıdan çağrılmak için tasarlanmamıştır ve buna gerek de yoktur.

Harici Cron Servisi Seçenekleri

  • cron-job.org — ücretsiz katman, özel HTTP başlıklarıyla 60 saniyeye kadar aralıkları destekler. cron.php URL'nizi X-Cron-Secret başlığıyla hedefleyen bir görev ekleyin.
  • Özel istek başlığı desteği olan herhangi bir çalışma süresi/HTTP izleme aracı — birçok popüler araç ücretli katmanlarında bunu destekler; zaten çalıştırdığınız bir kontrolün üzerine zamanlamayı bindirmenizi sağlar.
  • Zaten kullandığınız bir otomasyon platformu (n8n, Zapier vb.)cron.php'u doğru başlıkla hedefleyen zamanlanmış bir HTTP istek düğümü aynı işi görür ve zaten başka jekcms otomasyonlarını buradan yürütüyorsanız her şeyi tek yerde tutar.

Güvenilir Zamanlama İçin Pratik İpuçları

  • 60 saniyelik throttle'a çalışma payı bırakmak için gönderileri en az birkaç dakika ileriye zamanlayın
  • Birden fazla gönderiyi aynı dakikaya zamanlamak yerine birkaç dakika arayla planlayın
  • Yaklaşan yayınları bir bakışta doğrulamak için yönetim panelindeki zamanlanmış gönderiler görünümünü kullanın
  • Zamana duyarlı içerik için güvenmeden önce kurulumunuzu özel bir gönderiyle test edin
  • Aynı sunucudaki her jekcms sitesinin kendi cron girişine ihtiyacı vardır — zamanlama mekanizmasını paylaşmazlar
  • Sistem, config/config.php dosyasındaki SITE_TIMEZONE sabitiyle yapılandırılan saat dilimini kullanır

Hemen Sipariş Verin

Tek seferlik ödeme, ömür boyu erişim. Kurulum 30 dakika.

Fiyatlara Bak
  • 30 dakikada kurulum ve yayın
  • 14+ profesyonel tema
  • n8n otomasyon entegrasyonu
  • Otomatik SEO — Sitemap, Schema.org
  • iyzico ödeme entegrasyonu

Yeniliklerden ilk sen haberdar ol

Yeni özellikler, sürüm notları ve CMS rehberleri — ayda birkaç e-posta, spam yok.