Cron ifadesi nedir?
Cron ifadesi, bir iş zamanlayıcısına bir görevin tam olarak ne zaman çalıştırılacağını söyleyen kompakt bir zamanlama dizesidir. Format, 1975’te Unix V7 cron daemonunda doğdu ve o günden bu yana neredeyse hiç değişmedi — aynı beş alanlı dilbilgisi bugün Kubernetes CronJob’larında, AWS EventBridge’de, GitHub Actions iş akışlarında, Google Cloud Scheduler’da, GitLab CI’da, Jenkins pipeline’larında ve her Linux dağıtımıyla birlikte gelen crontab ikili dosyasında yer almaktadır. Dilbilgisi on üç karaktere çok anlam sığdırır; bu yüzden onu anlaşılır metne dönüştüren bir ayrıştırıcı, güvenli bir dağıtım ile sabah 3’teki geri alma arasındaki farktır.
Cron ifadesi nasıl çalışır?
Standart bir cron ifadesinde, birlikte tekrarlayan bir zamanlama tanımlayan beş boşlukla ayrılmış alan bulunur. Motor her dakika geçerli saati ifadeyle karşılaştırır ve beş alan da eşleştiğinde görevi çalıştırır. Alanlar soldan sağa:
- Dakika (0–59). Görevin saat içinde hangi dakikada çalışacağı.
0tam saati,30yarıyı,*/5her beş dakikayı (00, 05, 10, ...),15,45çeyrek geçe ve çeyrek kaleyi ifade eder. - Saat (0–23). 24 saatlik düzende günün hangi saati.
0gece yarısı,9sabah 9,17akşam 5. Aralıklar (9-17mesai saatleri için) ve adım değerleri (*/2her iki saatte bir için) dakikalarla aynı şekilde çalışır. - Ayın günü (1–31). Hangi takvim günü çalışacağı.
1ayın 1’i,*her gün,1,151’i ve 15’i demektir.31ile dikkatli olun — 31’i olmayan ayları sessizce atlar. - Ay (1–12 veya OCA–ARA). Hangi aylarda çalışacağı.
*her ay,1,7Ocak ve Temmuz,1-3yalnızca 1. çeyrek demektir. Üç harfli ay adları çoğu uygulamada büyük/küçük harf duyarsızdır. - Haftanın günü (0–7; hem 0 hem de 7 Pazar anlamına gelir). Belirli hafta günlerine kısıtlar.
1-5Pazartesi’den Cuma’ya,0,6hafta sonu,MON-FRIçoğu ayrıştırıcıda çalışır. Hem ayın günü hem de haftanın günü belirli değerlere ayarlandığında, klasik cron her ikisinden birinde ateşler (mantıksal VEYA), bu durum herkesi en az bir kez şaşırtır.
Neden cron ifadesi ayrıştırıcısı kullanılır?
- Dağıtımdan önce sessiz yanlış okumayı yakalayın. `0 2 */3 * *` ifadesi her üç dakikada bir değil, her üç günde bir sabah 2’de çalışır — buraya yapıştırın ve üretime gitmeden önce bunu düz İngilizce’de görün.
- Çoğu bulut zamanlayıcısı varsayılan olarak UTC’de çalışır. Sonraki on çalışma zamanını yerel saat diliminizde önizlemek, birisini sabah 3’te uyandırmadan önce saat dilimleri kaynaklı kaymaları ortaya çıkarır.
- `@daily`, `@weekly` ve `@monthly` gibi kısayollar kullanışlı ama belirsizdir. Ayrıştırıcı altta yatan beş alanlı formu gösterir, böylece tam olarak neyin zamanlandığını bilirsiniz.
- Alan alan oluşturucu, bir zamanlama oluşturmanızı ve okunabilir açıklamanın canlı güncellendiğini izlemenizi sağlar — cron kılavuzunu onuncu kez yeniden okumaktan çok daha hızlı.
Cron ifadeleri nerede kullanılır?
Cron sözdizimi, bir işin saate göre tekrarlanması gereken her yerde karşımıza çıkar. Her birinin meşhur olduğu tuzakla birlikte en yaygın üç kullanım alanı:
- Yedekleme zamanlamaları. Bir veritabanını her gece saat 2’de S3’e aktaran ya da ayın 1’inde `pg_dump` arşivini döndüren klasik `crontab -e` girişi. `0 2 * * * /usr/local/bin/backup.sh` satırı tarihte en çok cron’da gönderilmiş satırdır. Dakika ve saati doğru ayarlayın, stderr’i kalıcı bir yere yönlendirin; manuel kontrol listesini otomatik bir betiğe dönüştürmüş olursunuz.
- GitHub Actions `schedule` tetikleyicileri. `.github/workflows/*.yml` dosyasındaki `on.schedule.cron` anahtarı standart beş alanlı cron’u kabul eder; ancak iş her zaman UTC’de çalışır ve runner kuyruğu doluysa GitHub tetiklemeyi sessizce atlayabilir. Yaygın kalıp: hafta içi her gün sabah 9 UTC’de özet göndermek için `cron: '0 9 * * 1-5'`. Yerel saat diliminizde önce önizleyin; aksi takdirde 9:00 Londra özeti BST’de 10:00’da gelir.
- AWS EventBridge Scheduler. EventBridge cron ifadeleri yıl için altıncı bir alan alır ve ayın günü ya da haftanın günü alanında `*` yerine `?` gerektirir — `cron(0 9 ? * MON-FRI *)`, klasik saat 9 hafta içi standardının EventBridge karşılığıdır. Zamanlanmış Lambda çağrıları, ECS görev çalıştırmaları ve Step Function başlatmaları için kullanılır; klasik cron sözdizimindeki uyumsuzluk, CloudFormation dağıtımlarında en sık `ValidationException` hatasının kaynağıdır.
Gerçek bir cron ifadesi nasıl görünür?
0 9 * * 1-5 ifadesini ele alalım — her hafta içi saat 9:00’da çalışır. Alanları soldan sağa okuyalım: 0 saatin sıfırıncı dakikası, 9 24 saatlik düzende sabah 9, ayın günü için * her takvim günü, ay için * her ay, haftanın günü için 1-5 Pazartesi’den Cuma’ya kısıtlama (standart cron numaralandırmasında 1 = Pazartesi). Yukarıdaki giriş alanına yapıştırın; ayrıştırıcı seçtiğiniz IANA diliminde Pazartesi’den Cuma’ya saat 09:00’da olduğunu ve sonraki on çalışma tarihini doğrular. AWS EventBridge sözdizimindeki karşılığı: cron(0 9 ? * MON-FRI *) — sonda yıl alanına ve * yerine ?’ye dikkat edin. Quartz ifadesi (baş saniye ile altı alanlı): 0 0 9 ? * MON-FRI. Üç farklı platform, üç farklı sözdizimi, tek bir zamanlama.
Cron ifadeleri tam olarak tek bir yönden acımasızdır: bir yazım hatası, kod incelemesinde yakalanacak herhangi bir hata olmadan yanlış zamanda çalışan sözdizimsel olarak geçerli bir zamanlama oluşturur. `0 0 1 * *`’ı okuyup bunun 1 Ocak’ta değil, her ayın 1’inde gece yarısı çalıştığını bilmek pratik gerektirir. Yukarıdaki ayrıştırıcı bu pratiği on saniyelik bir kontrol haline getirir — ifadeyi yapıştırın, metni okuyun, yerel diliminizdeki sonraki on çalışma zamanını tarayın ve YAML’ın commit mesajının söylediklerini gerçekten yapacağını bilerek gönderin.
5 alanlı ve 6 alanlı cron arasındaki fark nedir?
Beş alanlı cron, bir dakika çözünürlüğüyle klasik Unix dilidir. Altı alanlı cron, alt dakika zamanlaması için baştaki saniye sütununu ekler — Quartz ve Spring’in @Scheduled özelliği tarafından kullanılır. AWS EventBridge de altı alan kullanır; ancak fazladan sütunu saniye değil, baştaki yıl alanıdır.
@hourly, @daily ve @weekly ne anlama gelir?
1987’de Vixie-cron tarafından tanıtılan takma adlar. @hourly = 0 * * * *, @daily = 0 0 * * *, @weekly = 0 0 * * 0, @monthly = 0 0 1 * *, @yearly = 0 0 1 1 *. @reboot başlangıçta bir kez çalışır. GitHub Actions ve EventBridge bu takma adları reddeder.
Cron’da Pazar günü 0 mı yoksa 7 mi?
Klasik Vixie cron’da her ikisi de — 0 ve 7 kabul edilir; böylece 5-7 gibi aralıklar Cuma’dan Pazar’a doğal okur. Pazartesi her zaman 1, Cumartesi her zaman 6’dır. Quartz ve AWS EventBridge farklı bir kural kullanır: Pazar’ın 1 olduğu 1-7 aralığı. Varsayımda bulunmadan önce platform belgelerini kontrol edin.
Cron yaz saati uygulamasını nasıl ele alır?
Motorun saat dilimine bağlıdır. UTC’de (EventBridge, Kubernetes ve GitHub Actions varsayılanı) yaz saati uygulaması yoktur. Yerel YSU diliminde, klasik Vixie cron ileri saate alındığında görevleri atlar ve geri saate alındığında iki kez çalıştırır; systemd timer’lar ise tam olarak bir kez çalışır.