Cron ifadelerinde sık hatalar ve saat dilimi tuzakları
Gün ile haftanın gününün VEYA ile birleşmesi, adım değerlerinin saat başında sıfırlanması, 31. günlü ay tuzağı, UTC ile yerel saat farkı ve yaz saati geçişlerinde atlanan ya da çift çalışan işler.
Zamanlanmış görevler (gece senkronu, rapor, yedek) çoğu entegrasyonun sessiz omurgasıdır. Cron ifadesi kısa olduğu için hatası da kolay gözden kaçar: ifade geçerlidir, görev çalışır, ama beklediğiniz zamanda çalışmaz. Aşağıdakiler standart beş alanlı ifade (dakika, saat, ayın günü, ay, haftanın günü) için en sık karşılaştığımız tuzaklardır.
1. Ayın günü ile haftanın günü VEYA'dır
"0 9 1 * 1" ifadesini "ayın 1'i pazartesi ise 09:00" diye okumak yaygın bir yanılgıdır. Her iki alan da kısıtlıysa klasik (Vixie) cron bunları VEYA ile birleştirir: görev ayın 1'inde ve ayrıca her pazartesi çalışır. İkisinden biri yıldızsa mantık VE'ye döner. "Ayın ilk pazartesisi" gibi bir koşul için ifade tek başına yetmez; görev içinde bugünün tarihini kontrol etmek gerekir.
2. Adım değeri saat başında sıfırlanır
"*/7 * * * *" yedi dakikada bir demek gibi görünür; gerçekte dakikalar 0, 7, 14, ... 56 olur ve ardından saat başında yeniden 0 gelir. Yani 56'dan sonraki aralık 4 dakikadır. Aralığın 60'ı bölmediği adımlar (7, 8, 25...) düzensiz çalışır. Gerçekten eşit aralık gerekiyorsa 60'ı bölen bir adım (5, 10, 15, 20, 30) seçin ya da zamanlayıcıyı "son çalışmadan beri" mantığıyla kurun.
3. 31. gün olmayan aylar
"0 0 31 * *" her ay değil, yalnızca 31 gün çeken yedi ayda çalışır. "Ay sonu" için genellikle ayın 28'i gibi güvenli bir gün seçilir ya da görev her gün çalışıp "yarın ayın 1'i mi" diye bakar. Şubat'ta 30 ve 31 hiç, 29 ise yalnızca artık yıllarda bulunur.
4. Saat dilimi: sunucu ne diyor?
Cron ifadesinin saat dilimi, görevin çalıştığı ortamın saat dilimidir ve çoğu bulut ortamında UTC'dir. UTC 06:00, Türkiye'de (UTC+3, yaz saati uygulaması yok) 09:00'dır. "Her sabah 09:00" için sunucu UTC ise ifade "0 6 * * *" olmalıdır. Ortam değiştiğinde (yerel makineden buluta) saat dilimi de değişir ve görev üç saat kayar. Bu yüzden ifadenin yanına hangi saat diliminde yazıldığını yorum olarak yazmak iyi bir alışkanlıktır.
5. Yaz saati geçişleri
Yaz saati uygulayan bir saat diliminde ilkbahar geçişinde bir saat yoktur: örneğin Almanya'da mart ayının son pazarı yerel saat 02:00'den 03:00'e atlar, "30 2 * * *" o gün çalışmayabilir. Sonbaharda bir saat iki kez yaşanır ve aynı görev iki kez çalışabilir. Davranış zamanlayıcıya göre değişir. Önlem: kritik işleri UTC'de planlayın ya da görevi tekrar çalıştırılsa zarar vermeyecek şekilde (idempotent) yazın.
6. Başka sistemlerin sözdizimi
Quartz ve benzeri araçlar saniye alanlı altı ya da yedi alanlı ifade kullanır; "?" "L" "W" gibi özel karakterleri vardır. Standart cron'a yapıştırılan böyle bir ifade geçersizdir ya da başka bir anlama gelir. Haftanın günü için 0 ve 7 pazar demektir; adlar (MON, JAN) her sistemde desteklenmeyebilir.
Çalıştırmadan önce görün
İfadeyi cron ifadesi çözümleyici aracına yazın: düz dille açıklar, saat dilimini seçerek sonraki 10 çalışma zamanını gösterir ve VEYA gibi tuzakları uyarır. Zaman damgalarını dönüştürmek için zaman damgası dönüştürücü, yeniden deneme davranışı için API yeniden deneme simülatörü var. Entegrasyon zamanlamanızı gözden geçirmek için bize yazın.
Bu konuyu kendi tesisiniz için konuşalım
Diğer notlar
Tüm notlar →- 2 dk okumaTıbbi cihaz UDI etiketinde sık yapılan altı hataAmbalaj seviyeleri, yeni UDI-DI gerektiren değişiklikler, Basic UDI-DI karışıklığı, eksik üretim tanımlayıcısı, etiket ile barkodun uyuşmaması ve baskı kalitesi: tıbbi cihaz UDI'sinde en sık karşılaşılan hatalar.
- 2 dk okumaAgregasyonda koli–palet ilişkisini bozan altı durumReddedilen kutu, kısmi koli, numune alma, elle müdahale, çift atama ve palet bozma: agregasyon kaydının fiziksel içerikten ayrıştığı en sık durumlar ve hatta nasıl önleneceği.
- 2 dk okumaSCADA verisinde eksik ve bozuk kayıtlar: modelden önce yapılması gerekenlerZaman damgası, boşluklar, donmuş sensörler, fiziksel sınır dışı değerler, kısıtlama ve bakım dönemleri, sensör değişimi: kestirimci bakım ya da üretim tahmini modelinden önce SCADA verisinde neye bakılmalı?