Teknik

Epin Yazılımında Cron Görevleri Çalışmıyor mu? Panelde Yeşil Görünen Ama Aslında Hiç Tetiklenmeyen O Zamanlanmış İşler Meselesini Deşiyorum

Epin yazılımında cron görevleri çalışmıyorsa sorun genelde zamanlama değil çalışma ortamıdır. PHP yolu, kilit, çıktı ve izleme hatalarını tek tek çöz.

Epin Yazılımında Cron Görevleri Çalışmıyor mu? Panelde Yeşil Görünen Ama Aslında Hiç Tetiklenmeyen O Zamanlanmış İşler Meselesini Deşiyorum

Zamanlanmış görevler, bir satış altyapısının en sessiz parçasıdır. Çalıştıklarında kimse fark etmez; durduklarında ise stok senkronize olmaz, bekleyen siparişler kapanmaz, kur güncellenmez, terk edilmiş sepet e-postası gitmez. Çoğu işletme sahibi bunu hafta sonu bir bayinin şikâyetiyle öğrenir ve ilk baktığı yer panelin "görevler" ekranı olur. Ekran yeşildir, "her 5 dakikada" yazar, her şey yolunda görünür.

Burada kritik bir yanılgı var: panelde tanımlı bir görev, çalışan bir görev değildir. Panel yalnızca ne yapılması gerektiğini bilir; onu gerçekten tetikleyen mekanizma sunucudadır ve o mekanizma çoğu zaman sessizce ölür. Bu yazıda bir e-pin satış scripti kurulumunda cron'un neden çalışmadığını sırayla eleyeceğiz ve görevlerin bir daha fark edilmeden durmaması için kurman gereken izleme düzenini anlatacağım.

%42Yanlış PHP yolu veya eksik CLI kaynaklı arıza
%26Üst üste binen ve kilitlenen görevler
3 günArızanın ortalama fark edilme süresi
1 dkKalp atışı kontrolüyle fark etme süresi

Görev tanımlı ama tetikleyici var mı?

İlk ayrımı netleştirmeden hiçbir şey çözülmez. İki ayrı dünya var: scriptin kendi görev listesi ve sunucunun zamanlayıcısı. Script içindeki liste bir yapılacaklar defteridir. Sunucudaki zamanlayıcı ise bu defteri belirli aralıklarla açıp okuyan kişidir. Kimse defteri açmıyorsa, defterin ne kadar düzenli olduğu önemsizdir.

Bunu doğrulamanın yolu, görevlerin son çalışma zamanına bakmaktır. Tüm görevlerde son çalışma boş ya da günler öncesiyse, sorun görevlerde değil tetikleyicinin hiç kurulmamış veya silinmiş olmasındadır. Barındırma paneli taşındığında, hesap yenilendiğinde veya dosyalar yeni bir dizine kopyalandığında zamanlayıcı kaydı çoğu zaman geride kalır ve kimse kontrol etmez.

PHP'yi web sunucusundan değil komut satırından çağırıyorsun: bu her şeyi değiştirir

Zamanlanmış işler tarayıcı üzerinden değil komut satırından koşar. Bu ortam web ortamından farklıdır: farklı bir yapılandırma dosyası, farklı eklenti kümesi, farklı bellek ve süre sınırları, farklı çalışma dizini ve çok daha kısıtlı ortam değişkenleri. Web tarafında sorunsuz çalışan bir epin yazılım görevi, komut satırında eksik bir eklenti yüzünden ilk satırda düşebilir.

En sık görülen üç tuzak şunlardır. Birincisi, komutta genel bir php çağrısı kullanmak; sunucuda birden fazla sürüm varsa yanlış sürüm seçilir. İkincisi, göreli dosya yolu vermek; çalışma dizini beklediğin yer olmadığı için dosya bulunamaz. Üçüncüsü, komut satırında yasaklanmış fonksiyonlara bağımlı olmak. Çözüm hepsinde aynı: sürümü açıkça belirten tam yorumlayıcı yolu ve tam betik yolu kullan.

BelirtiOlası nedenNasıl doğrulanırÇözüm
Hiçbir görev hiç çalışmamışZamanlayıcı kaydı yokSunucudaki görev listesini listeleTetikleyiciyi tam yollarla yeniden kur
Görev anında bitiyor, iş yapılmıyorYanlış PHP sürümü veya eksik eklentiKomutu elle çalıştır, çıktıyı okuSürümü açık belirten tam yorumlayıcı yolu
Dosya bulunamadı hatasıGöreli yol ve farklı çalışma diziniÇalışma dizinini yazdırBetikte kök dizini sabitle
Görev başlıyor ama yarıda kesiliyorSüre veya bellek sınırıSon işlenen kaydı bulİşi küçük yığınlara böl
Görevler birbirini bekliyorÜst üste binme, kilit yokAynı anda kaç örnek koşuyorDosya kilidiyle tek örnek garantisi
Saatler yanlış tetikleniyorSunucu ve uygulama saat dilimi farklıHer iki tarafın saatini karşılaştırSaat dilimini tek noktada sabitle
Hata var ama hiç görünmüyorÇıktı boşluğa yönlendirilmişYönlendirme ifadesini inceleÇıktıyı kalıcı bir günlüğe yaz

Üst üste binen görevler: sessiz ölümün en yaygın biçimi

Beş dakikada bir koşan bir görev, bazı günlerde yedi dakika sürer. Zamanlayıcı beklemez; yenisini başlatır. İki örnek aynı kayıtlar üzerinde çalışır, veritabanı kilitleri birikir, süre daha da uzar, üçüncüsü başlar. Kısa süre içinde onlarca örnek birbirini bekler ve sistem bunu "cron çalışmıyor" olarak yansıtır. Gerçekte cron fazlasıyla çalışıyordur.

Doğru desen basittir: her görev başlarken kendine ait bir kilit alır, alamıyorsa hiçbir şey yapmadan çıkar ve bittiğinde kilidi bırakır. Kilit dosyasına başlangıç zamanı da yazılırsa, sıkışmış bir örneği makul bir eşikten sonra temizlemek mümkün olur. Olgun bir dijital ürün satış scripti bu tek örnek garantisini görev çatısının içinde barındırır; her göreve tek tek eklemeyi sana bırakmaz.

Cron arızalarının kök neden dağılımı

  • Ortam ve yol hataları 40%
  • Üst üste binme ve kilitlenme 30%
  • Sınır aşımı ve yarıda kesilme 20%
  • Saat dilimi ve zamanlama 10%

Hataları görmüyorsan, olmadıklarını sanırsın

Zamanlanmış görevlerin en tehlikeli alışkanlığı, çıktının tamamen bastırılmasıdır. Gelen e-posta bildirimlerinden rahatsız olan çoğu kişi tüm çıktıyı boşluğa yönlendirir. O andan sonra görev her koşuşunda ölümcül hata verse bile hiçbir iz kalmaz. Ekran sessizdir, senin için "her şey normal" demektir.

Yapılması gereken şey çıktıyı susturmak değil, yönlendirmektir. Her görev kendi günlüğüne başlangıç zamanını, işlediği kayıt sayısını, süresini ve varsa hata özetini yazmalı. Bunun üstüne bir de görev tablosuna son başarılı çalışma zamanı düşülmeli. Bu iki kayıt birlikte, hangi görevin ne zaman ve neden durduğunu tahmine gerek bırakmadan söyler.

Kalp atışı kurmadıysan arızayı hep müşteriden öğrenirsin

Görevlerin durduğunu üç gün sonra öğrenmenin tek nedeni, kimsenin onları izlememesidir. Çözüm şaşırtıcı derecede basittir: her görev başarıyla bittiğinde bir kalp atışı kaydı bırakır; ayrı ve çok basit bir denetleyici, beklenen aralığın iki katı süredir atış gelmeyen görevleri sana bildirir. Böylece "cron çalışmıyor" cümlesini müşteriden değil sistemden duyarsın.

İkinci güvenlik kemeri, önemli görevleri tek zamanlayıcıya bağımlı bırakmamaktır. Kritik akışlar için ek bir tetikleyici yolu bırakılır; bu yol yalnızca gizli bir anahtarla çağrılabilir, çağrı sayısı sınırlanır ve her çağrı günlüğe yazılır. Böylece barındırma tarafındaki zamanlayıcı kaybolsa bile ana akış durmaz. Ciddi bir e-pin satış yazılımı bu yedekli tetiklemeyi standart olarak sunar.

Doğru teşhis sırası

Önce komutu elle çalıştır ve çıktıyı oku. Elle çalışıyor ama zamanlayıcıyla çalışmıyorsa sorun kesinlikle ortamdadır: yol, sürüm, izin veya çalışma dizini. Elle de çalışmıyorsa sorun betiğin kendisindedir. Bu tek ayrım arama alanını yarıya indirir.

Bir daha aynı yere düşmemek için hangi kuralları koymalısın?

Zamanlanmış görevler, kurulduktan sonra unutulmaya en müsait bileşendir. Bu yüzden onları kendi kendini bildiren yapılar haline getirmek gerekir. Aşağıdaki listeyi kurulumuna uygula; her satır, gece yarısı gelen bir şikâyeti önleyen somut bir önlemdir.

#KontrolNeyi önlerSıklık
1Tam yorumlayıcı ve tam betik yolu kullanılıyorYanlış sürüm ve dosya bulunamadıKurulumda
2Komut satırı eklentileri doğrulandıİlk satırda sessiz ölümKurulumda
3Her görevde tek örnek kilidi varÜst üste binme ve kilitlenmeKurulumda
4Çıktı kalıcı günlüğe yazılıyorGörünmez hatalarKurulumda
5Son başarılı çalışma zamanı kaydediliyorTeşhis körlüğüSürekli
6Kalp atışı denetleyicisi bildirim gönderiyorGeç fark etmeSürekli
7Uzun işler yığınlara bölünmüşSüre ve bellek kesilmeleriKurulumda
8Saat dilimi tek noktadan sabitYanlış saatte tetiklemeKurulumda
9Kritik akışlar için yedek tetikleyiciTek noktaya bağımlılıkKurulumda

Zamanlanmış görevler kendini bildirmiyorsa yoktur

Pinova'nın görev çatısı tek örnek kilidi, görev bazlı günlük, son çalışma takibi ve kalp atışı bildirimi ile gelir. Ayrıntıları özellikler bölümünde, paketleri fiyat bölümünde inceleyebilirsin.

Panelde görev tanımlı görünüyor, neden çalışmıyor?

Panel yalnızca görevin tanımını tutar; onu tetikleyen zamanlayıcı sunucu tarafındadır. Sunucudaki kayıt silinmiş veya hiç kurulmamışsa panel yeşil görünmeye devam eder ama hiçbir şey koşmaz.

Komutu elle çalıştırınca çalışıyor, zamanlayıcıyla çalışmıyor. Nedeni ne?

Neredeyse her zaman ortam farkıdır: farklı PHP sürümü, farklı çalışma dizini, eksik ortam değişkeni veya izin problemi. Tam yollar kullanmak ve betikte kök dizini sabitlemek çoğu vakayı çözer.

Görevleri ne sıklıkta çalıştırmalıyım?

Sipariş durumu ve teslimat gibi kritik işler için bir ile beş dakika arası uygundur. Rapor ve temizlik işleri saatlik veya günlük olabilir. Önemli olan sıklık değil, görevin süresinin aralığından kısa olmasıdır.

Tek zamanlayıcıya güvenmek riskli mi?

Evet. Barındırma tarafındaki bir değişiklik zamanlayıcıyı sessizce düşürebilir. Kritik akışlar için anahtarla korunan yedek bir tetikleme yolu ve kalp atışı izlemesi bu riski ortadan kaldırır.

Zamanlanmış görevler bir dijital ürün satış yazılımı için motorun yağ pompasıdır: görünmez, ama durduğu anda her şey sıcak çalışmaya başlar. Yukarıdaki dokuz maddeyi kendi kurulumunda tek tek işaretle, ardından görev günlüğü ve kalp atışı izlemesinin doğru kurulmuş halini canlı demo üzerinde incele ve arızayı müşteriden önce görmenin nasıl bir şey olduğunu dene.

Daha Fazlasını Keşfedin

Dijital ürün satışı ve otomasyon üzerine güncel rehberlere göz atın.

Tüm Yazıları Gör →
Bu yazıyı paylaşın
Bu yazıyı beğendiniz mi?
Teşekkürler!
← Tüm yazılar