hosting

Cron Cakismasi ve Kilitleme: Ayni Gorev Iki Kez Calisirsa

Zamanlanmis gorevler neden ust uste biner? Kilit dosyasi, veritabani kilidi ve gorevin calismadigini fark etmek. Cron Çakışması ve Kilitleme: Aynı Görev İki…

Cron Cakismasi ve Kilitleme: Ayni Gorev Iki Kez Calisirsa
İçindekiler
  1. Cron Çakışması ve Kilitleme: Aynı Görev İki Kez Çalışırsa
  2. Üst Üste Binme
  3. Ortaya Çıkan Hatalar
  4. Kilit Dosyası Yöntemi
  5. Güvenli Kilitleme
  6. Veritabanı ile Kilitleme
  7. Kayıt Bazlı Kilitleme
  8. Görevin Çalıştığını Doğrulamak
  9. Görev Tasarımı
  10. Sonuç
  11. Sıkça Sorulan Sorular (SSS)
  12. Aynı görev neden birden fazla kez çalışıyor?
  13. Kilit dosyası kullanmak yeterli mi?
  14. Paylaşımlı barındırmada nasıl kilitlerim?
  15. Görevin hiç çalışmadığını nasıl anlarım?

Cron Cakismasi ve Kilitleme: Ayni Gorev Iki Kez Calisirsa

Cron Çakışması ve Kilitleme: Aynı Görev İki Kez Çalışırsa

Her beş dakikada bir çalışan bir görev kurdunuz. Normalde iki dakika sürüyordu ama yoğun bir günde on dakikaya çıktı. Şimdi aynı görevin üç kopyası aynı anda çalışıyor ve aynı kayıtları işliyor.

Bu yazı, zamanlanmış görevlerde üst üste binmeyi önlemeyi ele alıyor.

Üst Üste Binme

Zamanlayıcı önceki çalışmayı beklemez:

  1. Görev başlar.
  2. Süre dolar, ikinci kopya başlatılır.
  3. İkisi aynı veriyi işler.

İkinci adım çoğu kişinin varsaymadığı davranıştır: zamanlayıcı, bir önceki çalışmanın bitip bitmediğine bakmaz — süre geldiğinde yeni bir kopya başlatır ve iki süreç aynı anda çalışmaya devam eder.

Yük arttıkça kopyalar birikir.

Sonunda sunucu kaynakları tükenir ve barındırma hesabı sınırlara takılır.

Bu, yavaşlamanın kendisinden daha büyük bir sorundur.

Ortaya Çıkan Hatalar

Görev türü Çakışmanın sonucu
E-posta gönderimi Aynı posta iki kez gider
Ödeme işleme Çift tahsilat
Rapor üretimi Bozuk dosya
Yedekleme Yarım yedek

Dördüncü satır en tehlikelisidir çünkü sessizdir: iki yedekleme süreci aynı dosyaya yazarsa ortaya çıkan arşiv bozuk olur ama hata vermez — sorun ancak geri yüklemeye çalıştığınızda anlaşılır.

Bu nedenle yedekleme görevleri mutlaka kilitlenmelidir.

Üçüncü satırda ise rapor dosyası yarım kalır veya karışır.

Birinci ve ikinci satırlar doğrudan müşteriye yansır.

Kilit Dosyası Yöntemi

  • Görev başlarken bir dosya oluşturur.
  • Dosya varsa çıkar.
  • Bitince dosyayı siler.

Bu basit yöntemin kritik bir zayıflığı vardır: süreç beklenmedik biçimde sonlanırsa kilit dosyası silinmeden kalır ve görev bir daha hiç çalışmaz — bu sessiz durma günlerce fark edilmeyebilir.

Çözüm, kilit dosyasına zaman damgası yazmaktır.

Belirli bir süreden eski kilitler geçersiz sayılır.

Süre, görevin en uzun makul çalışma süresinden uzun seçilmelidir.

Güvenli Kilitleme

  1. Var mı diye bakıp sonra oluşturmak risklidir.
  2. İki adım arasında başka süreç girebilir.
  3. Tek adımda kilitlemek gerekir.

İkinci madde klasik bir yarış koşuludur: kilit dosyası var mı diye kontrol edip yoksa oluşturmak arasında geçen milisaniyelerde başka bir kopya aynı kontrolü yapabilir — ikisi de kilidi almadığını sanır ve ikisi de çalışır.

İşletim sisteminin sunduğu dosya kilitleme işlevi bu sorunu çözer.

Kilit, tek bir işlemde alınır veya alınamaz.

Süreç sonlandığında işletim sistemi kilidi otomatik bırakır.

Veritabanı ile Kilitleme

Yöntem Uygunluk
Dosya kilidi Tek sunucuda iyi
Veritabanı kilit tablosu Çok sunucuda iyi
Benzersiz kayıt ekleme Basit ve güvenilir

Üçüncü satır pratik bir çözüm sunar: kilit adını benzersiz sütuna sahip bir tabloya eklemeyi denemek, ekleme başarılıysa kilidi aldınız demektir — veritabanı benzersizliği zaten tek adımda garanti eder.

İşlem bitince kayıt silinir.

Zaman damgası eklemek, takılı kalan kilitleri temizlemeyi sağlar.

Bu yöntem paylaşımlı barındırmada da sorunsuz çalışır.

Kayıt Bazlı Kilitleme

  • Tüm görevi kilitlemek gerekmeyebilir.
  • İşlenecek kayıt işaretlenir.
  • Başka kopya onu almaz.

İkinci madde daha esnek bir model sunar: kaydı işlemeye başlamadan önce durumunu işleniyor olarak güncellemek, birden fazla kopyanın aynı anda çalışmasına izin verirken aynı kaydın iki kez işlenmesini önler.

Bu, işlem hacmi yüksek görevlerde performans avantajı sağlar.

Durum güncellemesi ve alma tek sorguda yapılmalıdır.

Aksi hâlde aynı yarış koşulu burada da ortaya çıkar.

Görevin Çalıştığını Doğrulamak

  1. Başlangıç ve bitiş kaydedilir.
  2. Süre ölçülür.
  3. Beklenen sürede çalışmazsa uyarı verilir.

Üçüncü madde en sık atlanan izleme türüdür: bir zamanlanmış görevin çalışmaması hiçbir hata üretmez — sessizce hiçbir şey olmaz ve bunu ancak müşteri şikayet ettiğinde fark edersiniz.

Son çalışma zamanını kontrol eden basit bir izleme bu boşluğu kapatır.

İkinci madde ise sürelerin uzadığını erken gösterir.

Süre artışı, çakışma riskinin habercisidir.

Görev Tasarımı

Kötü tasarım İyi tasarım
Tüm kayıtları işle Sınırlı sayıda işle
Bitene kadar çalış Süre sınırında dur
Baştan başla Kaldığı yerden devam et

İkinci satır çakışma riskini kökten azaltır: görevi belirli bir süre sonunda kendini durduracak biçimde yazmak, çalışma süresinin zamanlayıcı aralığını aşmasını imkânsız kılar — kalan işler bir sonraki çalışmada tamamlanır.

Bu yaklaşım kilitleme ihtiyacını da azaltır.

Üçüncü satır ise ilerlemenin kaybolmamasını sağlar.

İşlenen kayıt işaretlendiği için tekrar ele alınmaz.

Düzenli çalışan görevler ve kilitleme için güvenilir bir zamanlayıcı desteği gerekir; Linux hosting kiralama ile zamanlanmış görevlerinizi panel üzerinden yönetebilirsiniz.

Sonuç

Çakışmanın nedeni basittir: zamanlayıcı, bir önceki çalışmanın bitip bitmediğine bakmaz. Kilit kullanın ama doğru kurun — kilit dosyası var mı diye kontrol edip yoksa oluşturmak arasında başka bir kopya aynı kontrolü yapabilir. Kilide zaman damgası ekleyin, görevi süre sınırında duracak biçimde yazın ve görevin hiç çalışmadığını fark edecek bir izleme kurun.

Sıkça Sorulan Sorular (SSS)

Aynı görev neden birden fazla kez çalışıyor?

Zamanlayıcı önceki çalışmanın bitip bitmediğine bakmaz; süre geldiğinde yeni bir kopya başlatır. Görev normalde iki dakika sürerken yoğun bir günde on dakikaya çıkarsa üç kopya aynı anda çalışır ve yük arttıkça kopyalar birikir.

Kilit dosyası kullanmak yeterli mi?

Dikkatli kurulursa evet. İki tuzağı var: süreç beklenmedik biçimde sonlanırsa kilit silinmeden kalır ve görev bir daha hiç çalışmaz; ayrıca "var mı diye bakıp sonra oluşturmak" yarış koşuluna açıktır. Zaman damgası ekleyin ve işletim sisteminin dosya kilitleme işlevini kullanın.

Paylaşımlı barındırmada nasıl kilitlerim?

En basit yol veritabanıdır: kilit adını benzersiz sütuna sahip bir tabloya eklemeyi deneyin; ekleme başarılıysa kilidi aldınız demektir. Veritabanı benzersizliği tek adımda garanti eder. İşlem bitince kaydı silin, zaman damgasıyla takılı kilitleri temizleyin.

Görevin hiç çalışmadığını nasıl anlarım?

İzleme kurmadan anlayamazsınız; çalışmayan bir görev hiçbir hata üretmez, sessizce hiçbir şey olmaz. Her çalışmada başlangıç ve bitiş zamanını kaydedin ve son çalışma zamanı beklenen aralığı aşarsa uyarı üretin.