Teknik

Cron Görevin Sessizce Çalışmayı Bıraktığında Kimse Sana Haber Vermez: Kaçan Görevleri 24 Saatte Yakalama Yöntemi

E-pin satış scriptinde cron görevleri sessizce durur. Kaçan görevleri tespit etme, kalp atışı izleme, kilitleme ve zaman aşımı için pratik kurulum rehberi.

Cron Görevin Sessizce Çalışmayı Bıraktığında Kimse Sana Haber Vermez: Kaçan Görevleri 24 Saatte Yakalama Yöntemi

Cron ile ilgili en yaygın yanılgı şudur: "Kurdum, çalışıyor, bir daha bakmam gerekmez." Oysa zamanlanmış görevlerin doğası tam tersidir. Bir cron görevi bozulduğunda ekrana kırmızı bir hata basmaz, müşteri seni aramaz, sunucu bir uyarı göndermez. Sadece yapması gereken şeyi yapmaz ve bunu günlerce sessizce sürdürür. Sonucu ancak dolaylı olarak fark edersin: bir bayi "ödemem geçti ama kod gelmedi" diye yazar, kur bir haftalık eski çıkar, rapor rakamları tutmaz.

Bir e-pin satış scriptinde cron üzerinde duran işler tam olarak paranın aktığı yerdir: bekleyen siparişleri işlemek, tedarikçi stoğunu senkronize etmek, ödeme durumunu doğrulamak, kuru güncellemek, iade süresi geçen kaydı kapatmak. Bunlardan biri sessizce dururken site mükemmel çalışır görünür. Bu yazıda kaçan görevleri nasıl tespit edeceğini, hangi durumda alarm kuracağını ve görevleri baştan nasıl "kendini ihbar eden" hâle getireceğini anlatıyorum.

SessizBozulan bir cron görevinin varsayılan hata bildirimi
1 günKalp atışı izlemesi olmayan sistemde tipik fark etme süresi
%1Üst üste binen görevlerin toplam vakalardaki payı değil; ama hasarı en büyük olanı
3 katmanGüvenilir cron için gerekli minimum: kilit, kayıt, kalp atışı

Bir cron görevi tam olarak nasıl sessizce ölür?

Ölüm nedenleri sandığından çeşitlidir. En basiti yol değişikliğidir: PHP sürümünü yükselttin, çalıştırılabilir dosyanın yolu değişti, görev artık "komut bulunamadı" diyerek çıkıyor. İkincisi izin sorunudur; dosya sahibi değişmiş, görev okuma yetkisi bulamıyor. Üçüncüsü bellek ya da süre sınırıdır; iş yükü büyüdükçe görev yarıda kesilmeye başlar ve her seferinde ilk yüz kaydı işleyip ölür.

Daha kurnaz olanı ise kısmi başarısızlıktır. Görev çalışır, çıkış kodu sıfır döner, her şey yolunda görünür; ama içindeki tedarikçi çağrısı zaman aşımına uğramıştır ve hiçbir sipariş işlenmemiştir. Çıkış koduna bakan bir izleme burada seni kurtarmaz. Bu yüzden "görev koştu mu?" sorusu yeterli değildir; "görev işini yaptı mı?" sorusunu sormak zorundasın.

Neden ilk yapman gereken şey her koşuyu kaydetmek?

Görünürlük olmadan güvenilirlik olmaz. Her cron görevi, başlangıcında ve bitişinde veritabanına tek bir satır yazmalı: görev adı, başlangıç zamanı, bitiş zamanı, işlenen kayıt sayısı, durum ve varsa hata mesajı. Bu tablo, sonradan kurulacak her alarmın temelidir. Üstelik maliyeti neredeyse sıfırdır; günde birkaç yüz satır hiçbir sistemi zorlamaz.

Bu kaydı tuttuğun anda üç soruyu anında yanıtlayabilir hâle gelirsin: görev en son ne zaman çalıştı, ortalama ne kadar sürüyor, kaç kayıt işliyor. Kaçan görevi yakalamak da bu noktadan sonra basit bir karşılaştırmaya döner. Ciddi bir dijital ürün satış yazılımında bu görev kayıt tablosu ve yönetim panelindeki durum ekranı standart gelir; kendi kodunu yazıyorsan ilk eklemen gereken şey budur.

GörevÖnerilen sıklıkKaçırılırsa etkisiAlarm eşiği
Bekleyen sipariş işlemeHer dakikaÖdemesi alınmış sipariş teslim edilmez5 dakika koşu yoksa
Ödeme durumu doğrulama2-5 dakikaGeçen ödeme siparişe bağlanmaz15 dakika koşu yoksa
Tedarikçi stok senkronu10-15 dakikaTükenmiş ürün satılır45 dakika koşu yoksa
Döviz kuru güncellemeSaatte birKâr marjı erir veya fiyat şişer3 saat koşu yoksa
Bayi bakiye mutabakatıGünde birMuhasebe farkı birikir36 saat koşu yoksa
YedeklemeGünde birGeri dönüş noktası kaybolur30 saat koşu yoksa
Eski oturum ve geçici dosya temizliğiGünde birDisk dolar, site durur48 saat koşu yoksa

Kalp atışı izlemesi kurmadan neden hiçbir şey garanti değil?

Kayıt tutmak geçmişi anlatır, alarm ise geleceği korur. Mantık şu: görev başarıyla bittiğinde bir izleme servisine "yaşıyorum" sinyali gönderir. Beklenen süre içinde sinyal gelmezse servis sana haber verir. Kritik nokta şudur: kontrol eden taraf, izlenen sunucunun dışında olmalıdır. Sunucu tamamen kapandıysa, o sunucuda çalışan bir kontrol betiği de kapalıdır ve hiç kimse bir şey fark etmez.

Dış servis kullanmak istemiyorsan en azından ikinci bir noktadan kontrol et: farklı bir sunucudaki basit bir görev, senin sitenin durum adresini çağırıp en son koşu zamanlarını okusun ve eşik aşıldıysa mesaj göndersin. Bildirim kanalı olarak e-posta yerine anlık mesajlaşma tercih et; e-posta gecikir, spam klasörüne düşer, gece görülmez. Bir sipariş kuyruğunun durduğunu on iki saat sonra öğrenmek, hiç öğrenmemekle neredeyse aynıdır.

İncelenen cron arızalarının kök nedenleri

  • Yanlış yol, izin veya sürüm değişikliği 45%
  • Zaman aşımı ve bellek sınırı 25%
  • Üst üste binen koşu ve kilit yokluğu 20%
  • Sunucu saati ve zaman dilimi hatası 10%

Üst üste binen görevler neden kaçan görevden daha pahalı?

Her dakika çalışan bir sipariş işleme görevi düşün. Bir gün kuyruk büyüdü ve görev doksan saniye sürmeye başladı. Artık her dakika yeni bir kopya başlıyor ve önceki henüz bitmemiş. On dakika sonra on kopya aynı kayıtlar üzerinde yarışıyor. Sonuç: aynı siparişe iki kod tahsis edilir, aynı bakiye iki kez düşülür, sunucu yükü çığ gibi büyür. Kaçan görev satışı geciktirir; üst üste binen görev muhasebeyi bozar.

Çözüm her görevi tek koşumlu hâle getirmektir. Görev başlarken bir kilit alır, alamıyorsa sessizce çıkar. Kilit bir dosya kilidi olabilir, veritabanında atomik bir kayıt olabilir, bellek tabanlı bir anahtar olabilir. Hangi yöntemi seçersen seç iki şart vardır: kilidin bir zaman aşımı olmalı, yoksa çöken bir koşu kilidi sonsuza kadar tutar; ve kilit, iş bittiğinde hata durumunda bile mutlaka bırakılmalı.

Görevleri parti hâlinde ve kaldığı yerden çalıştır

Bir görev tüm kuyruğu bitirmeye çalışmasın; her koşuda sabit sayıda kayıt işleyip çıksın. Böylece zaman aşımına uğramaz ve kesilse bile bir sonraki koşu kaldığı yerden devam eder. Uzun tek koşu, güvenilirliğin en büyük düşmanıdır.

Zaman dilimi ve sunucu saati seni nasıl aldatır?

Görev gece üçte çalışsın diye ayarladın, ama sunucu farklı bir zaman diliminde. Günlük raporun kesim saati kayıyor, ciro yanlış güne yazılıyor, kampanya bitişi bir saat sarkıyor. Daha kötüsü, uygulamanın zaman dilimi ile sistem saati farklı olduğunda görev kayıtlarındaki zaman damgaları da yanıltıcı hâle gelir ve sorunu ararken saatler harcarsın.

Kural basittir: sunucu ve uygulama aynı zaman dilimini kullansın, veritabanına tüm zamanları tek ve tutarlı biçimde yaz, kullanıcıya gösterirken çevir. Ayrıca saat senkronizasyon servisinin çalıştığından emin ol; kayan bir sistem saati, imza ve zaman damgası doğrulaması yapan ödeme servislerinde doğrudan reddedilmeye yol açar. Bu ayrıntıyı kontrol etmek beş dakika sürer, atlamanın bedeli bir günlük satıştır.

24 saatte kurulabilecek bir denetim planı nasıl olur?

Her şeyi aynı anda mükemmelleştirmeye çalışma. Önce görünürlük, sonra alarm, en son iyileştirme. Aşağıdaki kontrol listesini sırayla uygula; ilk dört madde tek bir akşamda tamamlanabilir ve zaten en büyük riski ortadan kaldırır. Kalan maddeler ise sistemi "kendini ihbar eden" bir yapıya dönüştürür. İşin mantığını ve panel tarafındaki görev ekranını merak ediyorsan özellikler sayfasına bakabilirsin.

AdımNe yapılacakDoğrulamaÖncelik
1Tüm cron tanımlarını listele ve tek dosyada belgeleListede olmayan görev kalmadıKritik
2Her göreve başlangıç-bitiş kaydı ekleTabloda son 24 saatin satırları varKritik
3Her göreve zaman aşımlı kilit koyGörevi elle iki kez çalıştır, ikincisi çıkıyorKritik
4Kritik üç görev için dış kalp atışı alarmı kurGörevi kasten durdur, bildirim geliyorKritik
5İşlenen kayıt sayısı sıfırsa uyarı üretBoş koşu uyarısı tetikleniyorYüksek
6Görevleri parti hâlinde çalışacak şekilde bölOrtalama süre sınırın altındaYüksek
7Sunucu saati ve zaman dilimini eşitleSistem ve uygulama aynı saati raporluyorYüksek
8Panelde tek ekranda görev durumu gösterYeşil-kırmızı özet bakışta okunuyorOrta

Görev kuyruğunun durduğunu müşteriden öğrenme

Kilitleme, koşu kaydı ve durum ekranı hazır gelen bir e-pin yazılımı ile otomasyonu güvenle arkada bırak.

Paylaşımlı hostingde dakikalık cron yoksa ne yapmalıyım?

Panelde en sık beş dakika veriliyorsa, görevi kendi içinde döngüye alıp kısa aralıklarla birkaç parti işletebilirsin. Alternatif olarak dış bir zamanlayıcı servis, korumalı bir tetikleme adresini istediğin sıklıkta çağırabilir.

Görev çalışıyor ama hiçbir şey işlemiyorsa nasıl anlarım?

Koşu kaydına işlenen kayıt sayısını yaz. Kuyrukta bekleyen iş varken sayı sıfır dönüyorsa bu bir arızadır; çıkış kodu sıfır olsa da uyarı üretmelisin.

Kilit için hangi yöntem en güvenli?

Tek sunucuda dosya kilidi yeterlidir ve bedavadır. Birden fazla sunucu varsa paylaşılan bir kaynakta atomik kayıt gerekir. Her iki durumda da kilide zaman aşımı koy, aksi halde çöken bir koşu görevi kalıcı olarak bloke eder.

Alarmı e-posta ile kurmak yeterli mi?

Kritik görevler için değil. E-posta gecikir ve gözden kaçar. Sipariş işleme veya ödeme doğrulama gibi görevlerde anlık mesaj bildirimi kullan; günlük temizlik işleri için e-posta yeterlidir.

Otomasyon, çalıştığını kanıtlayabildiğin sürece güvenilirdir. Görev kaydı, kilit ve dış alarm üçlüsünü kurduğunda cron artık belirsiz bir kara kutu olmaktan çıkar ve panelde okunabilir bir duruma dönüşür. Bu yapının hazır hâlini görmek, görev durum ekranının nasıl okunduğunu denemek istersen canlı demo üzerinden yönetim tarafını gez; uygun paketi ise fiyat tablosunda karşılaştırabilirsin.

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