Cron İfade Ayrıştırıcı

Cron ifadeleri, Unix benzeri sistemlerde yinelenen görevler için zamanlamalar tanımlar. Bu araç cron sözdizimini (5-7 alan) ayrıştırır, her alanı anlaşılır dilde açıklar, sonraki planlanan çalışma zamanlarını hesaplar ve yaygın hatalar konusunda uyarır. Hem kullanıcı crontab formatını hem de kullanıcı ve komut alanları içeren sistem crontab formatını destekler.

Spesifikasyonlar

Yaygin Kullanim Alanlari

  • Bir cron görevinin neden beklenen zamanlarda çalışmadığını hata ayıklama
  • Yapılandırmadaki devralınmış cron ifadelerini anlama
  • Yedekleme ve bakım zamanlamalarını planlama
  • CI/CD boru hattı zamanlamalarını doğrulama (GitHub Actions, GitLab CI)
  • Dağıtımdan önce Kubernetes CronJob zamanlamalarını test etme
  • /etc/crontab veya /etc/cron.d/ dosyalarından sistem crontab girişlerini analiz etme

Ozellikler

  • 5 alanlı (standart), 6 alanlı (saniyeli) ve 7 alanlı (saniye ve yıllı) cron ifadelerini ayrıştırma
  • Kullanıcı alanı içeren sistem crontab formatını destekleme (ör. "0 5 * * * root /path/to/script")
  • Cron satırlarından komutu çıkarma ve görüntüleme
  • Her alanı okunabilir dilde açıklama
  • Sonraki 10 planlanan çalışma zamanını hesaplama
  • Aralıklar (1-5), listeler (1,3,5), adımlar (*/15) ve isimler (MON, JAN) desteği
  • Bir zamanlamada 31. günü belirtme gibi yaygın sorunlar hakkında uyarma

Ornekler

Her Hafta İçi Sabah 9'da

Deneyin →

Pazartesiden Cumaya sabah 9:00'da çalışır.

0 9 * * 1-5

Her 15 Dakikada

Deneyin →

Her saatin 0, 15, 30 ve 45. dakikalarında çalışır.

*/15 * * * *

Kullanıcı ve Komutlu Sistem Crontab'ı

Deneyin →

Root kullanıcı olarak sabah 5'te günlük yedekleme (/etc/crontab'dan sistem crontab formatı).

0 5 * * * root /usr/bin/backup.sh

Komutlu Cron (Kullanıcı Crontab'ı)

Deneyin →

Her 5 dakikada sağlık kontrolü (kullanıcı crontab formatı).

*/5 * * * * curl -s http://localhost/health

Her Ayın İlk Günü

Deneyin →

Her ayın ilk gününde gece yarısı çalışır.

0 0 1 * *

Ipuclari

  • Beş alan şunlardır: dakika (0-59), saat (0-23), ayın günü (1-31), ay (1-12), haftanın günü (0-6, Pazar=0).
  • Sistem crontab'ı (/etc/crontab, /etc/cron.d/*) komuttan önce kullanıcı adı için 6. bir alana sahiptir.
  • Kullanıcı crontab'ları (crontab -e) kullanıcı adı alanına sahip değildir; crontab sahibi olarak çalışır.
  • "Her" için * ve "her n'inci" için */n kullanın.
  • Gün isimleri (SUN-SAT) ve ay isimleri (JAN-DEC) büyük/küçük harfe duyarsızdır.
  • Ayın günü ve haftanın gününü birlikte kullanırken dikkatli olun; davranış uygulamalar arasında farklılık gösterir.

Anlama Cron İfade Ayrıştırıcı

Cron, Unix benzeri işletim sistemlerindeki zamana dayalı görev zamanlayıcısıdır ve cron ifadeleri bir görevin ne zaman çalışacağını tanımlayan kompakt sözdizimidir. Standart beş alanlı format; dakika (0-59), saat (0-23), ayın günü (1-31), ay (1-12) ve haftanın gününü (0-6, 0 Pazar'dır) belirtir. Yıldız işareti (*) tüm değerlerle eşleşir ve "* * * * *" her dakika çalıştırır.

Basit değerlerin ötesinde, cron birkaç operatörü destekler. Aralıklar (1-5) sürekli bir aralıkla eşleşir. Listeler (1,3,5) ayrık değerlerle eşleşir. Adım değerleri (*/15) düzenli aralıklar oluşturur. Bunlar birleştirilebilir: haftanın günü alanında 1-5/2, Pazartesi, Çarşamba, Cuma anlamına gelir. Ay ve haftanın günü alanları üç harfli isimleri kabul eder (JAN-DEC, SUN-SAT).

Cron uygulamaları farklılık gösterir. Kullanıcı crontab'ları beş alan artı komutu içerir. Sistem crontab'ları bir kullanıcı adı alanı ekler. Bazı uygulamalar saniyeler için altıncı bir alanı (Spring, Quartz, Kubernetes) ve yıl için yedinci bir alanı destekler. AWS EventBridge, GitHub Actions ve diğer bulut zamanlayıcılarının her birinin kendi varyasyonları vardır.

Yaygın tuzaklar arasında ayın günü ve haftanın günü alanları arasındaki etkileşim yer alır: her ikisi de belirtilmişse (* değilse), görev her iki koşuldan biri doğru olduğunda çalışır (VEYA mantığı). Saat dilimi işleme başka bir sorundur — CRON_TZ ayarlanmadıkça cron görevleri sistem saat diliminde çalışır ve yaz saati uygulaması geçişleri görevlerin atlanmasına veya iki kez çalışmasına neden olabilir.

/ operatörü adım değerleri oluşturur. Dakika alanında */5, "her 5. dakika" anlamına gelir ve saatin 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50 ve 55. dakikalarında çalışma üretir. Aralıklar adımlarla birleştirilebilir: 10-30/5, dakika 10 ile dakika 30 arasında her 5 dakikada bir anlamına gelir. Belirli günlerde belirli bir saatte görev çalıştırmak için dakika ve saat alanlarını istenen zamana, haftanın günü alanını hedef günlere ayarlayın. Örneğin, "30 14 * * 1-5" Pazartesiden Cumaya öğleden sonra 2:30'da çalışır ve "0 9 * * 0" her Pazar sabah 9'da çalışır. CRON_TZ açıkça yapılandırılmadıkça tüm zamanlar sunucunun yerel saat diliminde yorumlanır.

Cron duvar saati zamanını kullanır, bu da yaz saati uygulaması geçişlerinin beklenmeyen davranışlara neden olabileceği anlamına gelir. Saatler ileri alındığında, 2:00 ile 2:59 arasında planlanan görevler tamamen atlanabilir. Saatler geri alındığında, o aralıktaki görevler iki kez çalışabilir. Kritik görevler için CRON_TZ=UTC ayarlamak bu sorunları önler. Alternatif olarak, görevleri geçiş penceresi sırasında zamanlamaktan kaçının veya görevleri tekrarlanan çalışmaların zararsız olması için idempotent olarak tasarlayın.

Cron sözdizimi Unix sistemlerinin çok ötesinde benimsenmiştir. Kubernetes CronJobs, GitHub Actions, GitLab CI, AWS EventBridge, Google Cloud Scheduler, Spring @Scheduled ve birçok görev kuyruğu kütüphanesi zamanlama için cron ifadelerini kullanır. Ancak her uygulama farklı özellikleri destekleyebilir — bazıları saniye alanı, bazıları yıl alanı ekler ve bazıları ayın günü veya haftanın günü alanlarında "belirli bir değer yok" anlamında ? kullanır.

← Tum araclara don