Cron İfadeleri: Her Şeyi Zamanlayın
Her gece saat 3'te bir veritabanı yedeği almanız gerekiyor. Ya da her pazartesi sabahı bir rapor göndermek istiyorsunuz. Ya da her 15 dakikada bir önbelleği temizlemek istiyorsunuz. Linux ve Unix sunucularında bunun için kullanılan araç cron'dur ve cron'a bir şeyi ne zaman çalıştıracağını söyleme yolu bir cron ifadesidir.
Cron ifadeleri ilk bakışta ürkütücü görünür. 0 3 * * * veya */15 9-17 * * 1-5 kalıbı bilmiyorsanız anlamsız gelebilir. Ancak beş alanı anladığınızda sözdizimi şaşırtıcı derecede basittir.
Beş Alan
Her standart cron ifadesinin tam olarak beş alanı vardır, boşluklarla ayrılmıştır. Her alan bir zaman birimini temsil eder:
┌───────────── dakika (0-59)
│ ┌───────────── saat (0-23)
│ │ ┌───────────── ayın günü (1-31)
│ │ │ ┌───────────── ay (1-12)
│ │ │ │ ┌───────────── haftanın günü (0-7, burada 0 ve 7 Pazar)
│ │ │ │ │
* * * * *
Bu kadar. Beş alan, soldan sağa: dakika, saat, ayın günü, ay, haftanın günü.
Biliyor muydunuz? "Cron" adı, zaman anlamına gelen Yunanca "chronos" kelimesinden gelir. Cron arka plan süreci (daemon), 1975'ten bu yana Unix benzeri işletim sistemlerinin temel bir parçası olmuştur.
Özel Karakterler
Yıldız (*) — Her Değer
Yıldız, o alan için "her olası değer" anlamına gelir.
* * * * * = her günün her saatinin her dakikası.
Virgül (,) — Birden Fazla Değer
Virgül, bireysel değerleri ayırır.
0 9,12,18 * * * = saat 9, 12 ve 18'in 0. dakikasında (09:00, 12:00, 18:00).
Tire (-) — Değer Aralığı
Tire bir aralık tanımlar.
0 9-17 * * * = 9'dan 17'ye kadar her saatin 0. dakikasında (09:00'dan 17:00'ye, saatlik).
Eğik Çizgi (/) — Adım Değerleri
Eğik çizgi aralıkları tanımlar.
*/15 * * * * = her 15 dakikada bir (her saatin 0, 15, 30, 45. dakikası).
0 */2 * * * = her 2 saatte bir, 0. dakikada (gece yarısı, 02:00, 04:00, ...).
Cron İfadelerini Okuma: Pratik
Yaygın örnekler üzerinde çalışalım. Her biri için beş alanı soldan sağa okuyun.
0 3 * * * — Her Gün 03:00'te
| Alan | Değer | Anlam |
|---|---|---|
| Dakika | 0 | 0. dakikada |
| Saat | 3 | Saat 3'te (03:00) |
| Ayın günü | * | Her gün |
| Ay | * | Her ay |
| Haftanın günü | * | Haftanın her günü |
Çeviri: "Her gün saat 03:00'te." Gece yedekleri için klasik seçim.
*/15 * * * * — Her 15 Dakikada
| Alan | Değer | Anlam |
|---|---|---|
| Dakika | */15 | Her 15 dakikada |
| Saat | * | Her saat |
| Ayın günü | * | Her gün |
| Ay | * | Her ay |
| Haftanın günü | * | Her gün |
Çeviri: "24 saat boyunca her 15 dakikada bir." Sağlık kontrolleri ve önbellek yenilemeleri için yaygın.
0 9 * * 1-5 — Hafta İçi 09:00'da
| Alan | Değer | Anlam |
|---|---|---|
| Dakika | 0 | 0. dakikada |
| Saat | 9 | Saat 9'da |
| Ayın günü | * | Her gün |
| Ay | * | Her ay |
| Haftanın günü | 1-5 | Pazartesi'den Cuma'ya |
Çeviri: "Pazartesi'den Cuma'ya saat 09:00'da." Günlük iş raporları için mükemmel.
0 0 1 * * — Her Ayın İlk Günü
| Alan | Değer | Anlam |
|---|---|---|
| Dakika | 0 | 0. dakikada |
| Saat | 0 | Saat 0'da (gece yarısı) |
| Ayın günü | 1 | 1'inde |
| Ay | * | Her ay |
| Haftanın günü | * | Haftanın herhangi bir günü |
Çeviri: "Her ayın ilk günü gece yarısı." Aylık raporlar, faturalama veya temizlik için kullanılır.
30 8 * * 1 — Pazartesi 08:30'da
| Alan | Değer | Anlam |
|---|---|---|
| Dakika | 30 | 30. dakikada |
| Saat | 8 | Saat 8'de |
| Ayın günü | * | Her gün |
| Ay | * | Her ay |
| Haftanın günü | 1 | Pazartesi |
Çeviri: "Her pazartesi saat 08:30'da." Haftalık takım bildirimleri için harika.
Kendi Cron İfadelerinizi Yazma
İşte sistematik bir yaklaşım:
- Ne zaman ile başlayın. "Her gün saat 3'te" veya "mesai saatleri içinde her 5 dakikada."
- Alanları soldan sağa doldurun. Dakika ile başlayın, sonra saat, sonra ayın günü, sonra ay, sonra haftanın günü.
- "Her" için
*kullanın. Bir alanla ilgilenmiyorsanız*kullanın. - Dağıtmadan önce test edin. İfadenizin beklediğiniz zamanlamayı ürettiğini her zaman doğrulayın.
Yaygın Kalıplar Hızlı Referans
| Zamanlama | İfade |
|---|---|
| Her dakika | * * * * * |
| Her 5 dakikada | */5 * * * * |
| Her saat | 0 * * * * |
| Her gün gece yarısı | 0 0 * * * |
| Her gün 03:00'te | 0 3 * * * |
| Her pazartesi 09:00'da | 0 9 * * 1 |
| Hafta içi 08:30'da | 30 8 * * 1-5 |
| Her ayın ilk günü | 0 0 1 * * |
| Her 15 dk, mesai saatleri | */15 9-17 * * 1-5 |
| Günde iki kez (09:00 ve 18:00) | 0 9,18 * * * |
| Her pazar 02:00'de | 0 2 * * 0 |
Yaygın Hatalar
Saatlerin 0-23 Olduğunu Unutmak
Saat 13, 13:00'tür, saat 1 değil. Yaygın bir hata, 0 1 * * * yazıp 13:00'te çalışacağını düşünmektir; oysa aslında 01:00'de çalışır.
Haftanın Günü Karışıklığı
Pazar 0 veya 7 olabilir (ikisi de geçerlidir). Pazartesi 1, Cumartesi 6'dır. Bazı kişiler Pazartesi'nin 0 olmasını bekler.
Ayın Günü ve Haftanın Günü Etkileşimi
Hem ayın gününü hem de haftanın gününü belirtirseniz (ikisi de * değilse), çoğu cron uygulaması görevi her iki koşuldan biri karşılandığında çalıştırır, ikisi birden karşılandığında değil. Bu birçok kişiyi şaşırtır.
Uyarı 0 9 15 * 1 ifadesi "15'inde saat 9'da, ama sadece Pazartesi ise" anlamına GELMEZ. "Her ayın 15'inde saat 9'da VE her Pazartesi saat 9'da" anlamına gelir. Bu, beklenmeyen davranışların yaygın bir kaynağıdır.
Saat Dilimi Bilinci
Cron, sunucunun yerel saat diliminde çalışır. Sunucunuz UTC'deyse ve siz Türkiye'deyseniz (UTC+3), 0 9 * * * cron görevi sizin saatinizle 12:00'de çalışır. Sunucunuzun saat dilimini her zaman kontrol edin.
İpucu Cron ifadelerinizi dağıtmadan önce test edin ve görselleştirin: Cron İfadelerini Okuma ve Test Etme. Sonraki çalışma zamanlarını görün ve zamanlamanın niyetinizle eşleştiğini onaylayın.
Cron ifadelerinizi oluşturun ve test edin:
Ücretsiz, anında ve kayıt gerektirmez.