Cron İfadeleri Nasıl Okunur?
Bir cron ifadesi, boşluklarla ayrılmış birkaç alanla yinelenen bir zamanlamayı tanımlar. Fikir basittir, ancak alan sırası ve özel karakterler sistemden sisteme farklılık gösterir. Bu rehber yaygın biçimlerin nasıl okunacağını gösterir.
Unix'in Beş Alanı
Klasik Unix ve Linux cron'u soldan sağa okunan beş alan kullanır:
dakika saat ayın-günü ay haftanın-günü
Buna göre 30 9 * * 1-5 "Pazartesi'den Cuma'ya saat 09:30'da" anlamına gelir. Dakikalar 0–59, saatler 0–23, ayın günleri 1–31, aylar 1–12 arasındadır. Haftanın günü 0–6 arasındadır ve 0 pazar anlamına gelir (birçok uygulama pazar için 7'yi de kabul eder). Çoğu sürüm JAN veya MON gibi adları ve @daily veya @hourly gibi makroları da kabul eder.
Spring, Quartz ve AWS Biçimleri
Diğer zamanlayıcılar ek alanlar kullanır; bir ifadeyi bir sistemden diğerine kopyalarken en sık yaşanan karışıklığın kaynağı budur.
| Biçim | Alanlar | Haftanın günü |
|---|---|---|
| Unix / Linux | 5: dakika saat gün ay haftanın günü | 0–6, pazar = 0 |
| Spring | 6: saniye dakika saat gün ay haftanın günü | 0–7, pazar = 0 veya 7 |
| Quartz | 6 veya 7: saniye dakika saat gün ay haftanın günü [yıl] | 1–7, pazar = 1 |
| AWS EventBridge | 6: dakika saat gün ay haftanın günü yıl | 1–7, pazar = 1 |
Aynı rakamlar farklı anlamlara gelebilir: 0 0 12 * * ? Quartz'da "her gün öğlen" demektir, 5 alanlı okumada ise geçerli olmaz. Haftanın günü numaraları da kayar: Quartz ve AWS'de 2 pazartesidir, Unix cron'da ise salıdır. Desteklendiği yerlerde MON gibi gün adları bu belirsizliği önler.
Özel Karakterler
*alanın tüm değerleri.,bir liste, ör.1,15.-bir aralık, ör.9-17veyaMON-FRI./bir adım: dakika alanındaki*/1515 dakikada bir demektir;5/155'ten başlar (klasik Unix cron'da desteklenmez; orada5-59/15gibi bir aralık kullanılır).?"belirli değer yok"; Quartz ve AWS bunu ayın günü veya haftanın günü alanlarından birinde zorunlu kılar.Lson: ayın günü alanındakiLayın son günüdür; Quartz'da haftanın günü alanındaki6Lson cumadır.Wen yakın iş günü:15Wayın 15'ine en yakın iş günüdür.#ayın N. haftanın günü: Quartz ve AWS numaralandırmasında6#3üçüncü cumadır.
L, W ve #, klasik Unix cron'un desteklemediği uzantılardır.
Ayın Günü ve Haftanın Günü
İki gün alanı da kısıtlandığında sistemler bunların nasıl birleştirileceği konusunda farklı davranır. Klasik Unix cron'da iş, alanlardan herhangi biri eşleştiğinde çalışır: 0 9 13 * 5 yalnızca 13'üne denk gelen cumalarda değil, her ayın 13'ünde ve her cuma çalışır. Spring her ikisinin de eşleşmesini gerektirir. Quartz ve AWS ise iki alandan birinde ? zorunlu tutarak bu sorundan kaçınır.
LeedyBox Cron Çözümleyici seçtiğiniz biçimin kuralını uygular ve özetinde gün alanlarından birinin mi yoksa ikisinin birden mi eşleşmesi gerektiğini açıklar.
Saat Dilimleri ve Yaz Saati Uygulaması
Bir cron ifadesi saat dilimi içermez. İfade, onu çalıştıran sistemin veya hizmetin saat diliminde çalışır; bu, sunucunun yerel saati veya UTC olabilir. Yerel saatle 09:00 için yazılmış bir iş, sunucu UTC kullanıyorsa farklı bir saatte çalışabilir.
Yaz saati uygulaması ek uç durumlar getirir. Saatler ileri alındığında 02:30 gibi bir saat o gün hiç olmayabilir; geri alındığında iki kez yaşanabilir. Uygulamaya bağlı olarak bu aralıktaki bir iş atlanabilir, geç çalışabilir veya iki kez çalışabilir. Önemli işleri saat değişimi aralığının dışına veya UTC'ye göre zamanlamak sürprizleri azaltır. Cron Çözümleyici bir saat dilimi seçmenize izin verir ve sonraki çalışma zamanlarını listeler; böylece bir değişim çevresindeki tarihleri kontrol edebilirsiniz.
Sık Sorulan Sorular
Bir işi 5 dakikada bir nasıl çalıştırırım?
Unix cron'da */5 * * * * kullanın. Spring'de başa bir saniye alanı ekleyin: 0 */5 * * * *.
Quartz ifadem Linux crontab'da neden çalışmıyor?
Quartz ifadeleri bir saniye alanıyla başlar ve crontab'ın kabul etmediği ? veya L karakterlerini kullanabilir. İfadeyi 5 alanlı biçimde yeniden yazın.
Çözümleyicinin gösterdiği sonraki çalışma zamanları kesin mi?
Bu zamanlar seçilen biçim ve saat dilimi için tarayıcınızda hesaplanır. Uygulamalar farklılık gösterebileceğinden zamanlamayı işi çalıştıracak sistemde doğrulayın.