Cron İfadesi Doğrulayıcı

Cron ifadelerini doğrula ve alan-alan ayrıntılı dökümü göster

Örnek dene

Cron ifadesi

minute hour day(month) month day(week)

Geçerli cron ifadesi

Alan dökümü

Minute*/15(0–59)

Açılımı: 0, 15, 30, 45

Hour0-6(0–23)

Açılımı: 0, 1, 2, 3, 4, 5, 6

Day of month1,15(1–31)

Açılımı: 1, 15

Month*(1–12)

Açılımı: all (1–12)

Day of week1-5(0–6)

Açılımı: 1, 2, 3, 4, 5

Cron İfadesi Doğrulama Nedir?

Cron ifadesi doğrulama, bir cron dizesinin zamanlayıcıya ulaşmadan önce doğru sözdizimi kurallarına uyup uymadığını kontrol etme sürecidir. Cron ifadesi; tekrarlayan bir zamanlamayı tanımlamak için boşlukla ayrılmış beş alan (dakika, saat, ayın günü, ay, haftanın günü) kullanır. Herhangi bir alan izin verilen aralık dışında bir değer, geçersiz bir operatör veya yanlış alan sayısı gibi yapısal bir hata içeriyorsa, ifade ya dağıtım sırasında zamanlayıcı tarafından reddedilir ya da sessizce herhangi bir tetikleyici zamanıyla eşleşmeden başarısız olur.

Cron ifadesini çevrimiçi doğrulamak, üretime dağıtıp kaçırılan bir işi beklemeye kıyasla hataları çok daha erken yakalar. Yaygın hatalar arasında saat alanına 25 yazmak (geçerli aralık: 0-23), sıfır adım kullanmak (*/0, tanımsızdır), aralık sınırlarını ters yazmak (1-5 yerine 5-1) ya da Quartz gibi standart dışı formatlara ait ek alanlar eklemek yer alır. Bir sözdizimi denetleyicisi bu sorunları anında işaretler ve tam olarak hangi alanın hatalı olduğunu söyler.

Cron doğrulama, cron ayrıştırmadan farklıdır. Ayrıştırıcı geçerli bir ifadeyi alıp insan tarafından okunabilir bir zamanlamaya çevirir. Doğrulayıcı daha basit bir soruyu yanıtlar: bu ifade doğru biçimlendirilmiş mi? Ayrıştırmadan önce doğrulayın — geçersiz bir ifadeyi zamanlayıcıya göndermek anlamsızdır. CI/CD pipeline'larında otomatik cron doğrulama, bozuk zamanlamaların yapılandırma dosyalarına birleştirilmesini önler.

Bu Cron Doğrulayıcıyı Neden Kullanmalısınız?

Cron ifadesinin katı sözdizimi kuralları vardır ve zamanlayıcılar bu kurallar ihlal edildiğinde tutarsız hata mesajları verir. Bazı zamanlayıcılar ifadeyi şifreli bir hatayla reddeder; diğerleri sessizce kabul eder ve hiç çalıştırmaz. Bu doğrulayıcı, dağıtımdan önce size net, alan alan bir analiz sunar.

Anında Sözdizimi Kontrolü
Bir cron ifadesini yapıştırın veya yazın; doğrulamadan geçip geçmediğini anında görün. Form gönderimi yok, gecikme yok. Siz yazarken sonuç güncellenir.
🔒
Gizlilik Öncelikli İşleme
Doğrulama tamamen tarayıcınızda çalışır. Cron ifadeleriniz ve zamanlama yapılandırmalarınız hiçbir zaman sunucuya gönderilmez veya bir yerde depolanmaz.
🔍
Alan Alan Hata Raporlama
Bir ifade geçersiz olduğunda, doğrulayıcı hataya neden olan alanı ve nedenini belirtir. Beş alandan hangisinde sorun olduğunu tahmin etmek zorunda kalmazsınız.
📋
Hesap Gerekmez
Sayfayı açın ve kontrol etmeye başlayın. Giriş yok, API anahtarı yok, kurulum yok. Mobil dahil modern tarayıcısı olan her cihazda çalışır.

Cron Doğrulayıcı Kullanım Senaryoları

Frontend Geliştirici
Zamanlama arayüzlerinde kullanıcıların girdiği cron ifadelerini veritabanına kaydetmeden önce doğrulayın. Sözdizimi hatalarını backend reddi beklemeye gerek kalmadan istemci tarafında yakalayın.
Backend Mühendisi
Kod incelemesi sırasında görev kuyruğu yapılandırmalarındaki (Celery beat, Hangfire, Quartz) cron ifadelerini kontrol edin. Yeniden düzenlenmiş bir zamanlama dizesinin sözdizimi doğrulamasından hâlâ geçip geçmediğini doğrulayın.
DevOps / SRE
Kubernetes CronJob manifest dosyalarındaki ve CI/CD pipeline yapılandırmalarındaki cron zamanlamalarını uygulamadan önce doğrulayın. Yedekleme zamanlamasındaki bir yazım hatasının yedek kaçırılana dek fark edilmemesini önleyin.
QA Mühendisi
Uygulamanızın geçersiz cron girdisini doğru biçimde reddettiğini test edin. Aralık dışı değerler, yanlış alan sayısı gibi bilinen hatalı ifadeler üretin ve hata işlemenin düzgün çalıştığını doğrulayın.
Veri Mühendisi
Airflow DAG'leri ve dbt zamanlanmış çalışmaları için cron tetikleyicilerini doğrulayın. YAML veya JSON yapılandırma dosyalarından ayrıştırılan pipeline zamanlamalarının dağıtımdan önce sözdizimsel olarak doğru olduğunu onaylayın.
Öğrenci / Öğrenen
Cron sözdizimini deneyin ve neyin geçerli neyin geçersiz olduğu konusunda anında geri bildirim alın. Alan aralıklarını, operatörleri ve uç durumları ifadeler yazıp hata mesajlarını okuyarak öğrenin.

Yaygın Cron Sözdizimi Hataları

Aşağıdaki tablo en sık karşılaşılan cron ifadesi hatalarını ve nedenlerini listeler. Bunlar üretim yapılandırmalarında ve CI/CD pipeline'larında tekrar tekrar karşılaşılan hatalar.

Hata türüÖrnekNe yanlış gitti
Too few fields0 9 * *Missing the day-of-week field. Standard cron requires exactly 5 fields.
Too many fields0 0 9 * * 1 2026Extra fields. Some tools add seconds or year, but standard cron uses 5.
Value out of range0 25 * * *Hour field accepts 0-23. Value 25 exceeds the maximum.
Invalid step base0 0 32/2 * *Day-of-month starts at 32, which exceeds the 1-31 range.
Step of zero*/0 * * * *Step value must be 1 or greater. Zero creates an infinite loop.
Empty field0 9 * * 1Double space creates an empty field. Each field needs a value.
Invalid character0 9 * * Mon-FryTypo in day name. Use three-letter abbreviations: MON, TUE, WED, THU, FRI, SAT, SUN.
Reversed range0 9 * * 5-1Range end (1) is less than start (5). Write 1-5 or use a list: 5,6,0,1.

Geçerli ve Geçersiz Cron İfadeleri

Yaygın hatalarla birlikte doğru biçimlendirilmiş ifadelere hızlı bir başvuru. Bir zamanlayıcı yapılandırmasına yapıştırmadan önce ifadenizi kontrol etmek için kullanın.

Geçerli ifadeler
* * * * *
0 9 * * 1-5
*/15 * * * *
0 0 1,15 * *
30 2 * * 0
0 */6 * * *
Geçersiz ifadeler
0 9 * *4 alan var, 5 gerekli
0 25 * * *saat en fazla 23 olabilir
*/0 * * * *adım 0 olamaz
0 9 * * 8haftanın günü en fazla 6 olabilir
60 * * * *dakika en fazla 59 olabilir
0 0 0 * *ayın günü en az 1 olmalıdır

Kod Örnekleri

JavaScript, Python, Go ve Bash'te cron ifadelerini programatik olarak doğrulama. Her örnek, geçersiz sözdiziminin nasıl yakalanacağını ve anlamlı bir hata mesajının nasıl çıkarılacağını gösterir.

JavaScript (Node.js)
import { parseExpression } from 'cron-parser';

// Validate a cron expression by attempting to parse it
function validateCron(expr) {
  try {
    parseExpression(expr);
    return { valid: true, error: null };
  } catch (err) {
    return { valid: false, error: err.message };
  }
}

console.log(validateCron('0 9 * * 1-5'));
// → { valid: true, error: null }

console.log(validateCron('0 25 * * *'));
// → { valid: false, error: "Constraint error, got value 25 expected range 0-23" }

// Validate with field-level detail using cron-validator
import { isValidCron } from 'cron-validator';

isValidCron('*/15 * * * *');           // → true
isValidCron('*/15 * * * *', { seconds: true }); // → false (expects 6 fields)
isValidCron('0 0 31 2 *');             // → true (syntactically valid, Feb 31 never fires)
Python
from croniter import croniter

# Validate by checking if croniter can parse the expression
def validate_cron(expr: str) -> dict:
    if croniter.is_valid(expr):
        return {"valid": True, "error": None}
    # Get a more specific error message
    try:
        croniter(expr)
    except (ValueError, KeyError) as e:
        return {"valid": False, "error": str(e)}
    return {"valid": False, "error": "Unknown error"}

print(validate_cron("0 9 * * 1-5"))
# → {'valid': True, 'error': None}

print(validate_cron("0 25 * * *"))
# → {'valid': False, 'error': '...out of range...'}

print(validate_cron("* * *"))
# → {'valid': False, 'error': 'Exactly 5 or 6 columns...'}

# Field-level validation
from crontab import CronTab

cron = CronTab(tab="")
job = cron.new(command="/bin/true")
try:
    job.setall("0 9 * * 1-5")
    print(job.is_valid())  # → True
except Exception as e:
    print(f"Invalid: {e}")
Go
package main

import (
    "fmt"
    "github.com/robfig/cron/v3"
)

// ValidateCron checks whether a 5-field cron expression is syntactically correct
func ValidateCron(expr string) (bool, error) {
    parser := cron.NewParser(
        cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow,
    )
    _, err := parser.Parse(expr)
    if err != nil {
        return false, err
    }
    return true, nil
}

func main() {
    exprs := []string{
        "0 9 * * 1-5",   // valid
        "0 25 * * *",    // invalid: hour 25
        "*/15 * * * *",  // valid
        "0 0 32 * *",    // invalid: day 32
    }

    for _, e := range exprs {
        ok, err := ValidateCron(e)
        if ok {
            fmt.Printf("%-20s  VALID
", e)
        } else {
            fmt.Printf("%-20s  INVALID: %v
", e, err)
        }
    }
}
Bash
#!/bin/bash

# Validate cron syntax using Python one-liner
validate_cron() {
  python3 -c "
from croniter import croniter
import sys
expr = sys.argv[1]
if croniter.is_valid(expr):
    print(f'VALID: {expr}')
    sys.exit(0)
else:
    print(f'INVALID: {expr}')
    sys.exit(1)
" "$1"
}

validate_cron "0 9 * * 1-5"     # → VALID: 0 9 * * 1-5
validate_cron "0 25 * * *"      # → INVALID: 0 25 * * *

# Quick regex pre-check (catches field count and obvious issues)
cron_regex='^([0-9*/,-]+\s+){4}[0-9*/,-]+$'
echo "*/5 * * * *" | grep -Eq "$cron_regex" && echo "passes basic check"
echo "* * *" | grep -Eq "$cron_regex" || echo "fails basic check"

Sıkça Sorulan Sorular

Bir cron ifadesini geçersiz yapan nedir?
Bir cron ifadesi, beş alanlı formatın sözdizimi kurallarını ihlal ettiğinde geçersiz olur. Yaygın nedenler: yanlış alan sayısı (standart cron için 5'ten az veya fazla), izin verilen aralık dışında bir değer (ör. saat 25, dakika 60, ayın günü 0), sıfır adım (*/0), ters aralık sınırları (5-1) veya tanınmayan karakterler. İfadenin tam olarak boşlukla ayrılmış beş alanı olmalı ve her alanda geçerli değerler ile operatörler bulunmalıdır.
Hiç çalışmayan bir cron ifadesi geçerli midir?
Evet, sözdizimsel olarak. 0 0 31 2 * gibi bir ifade (Şubat'ın 31'i) sözdizimi doğrulamasından geçer çünkü her alan izin verilen aralıkta değerler içerir. Ancak Şubat'ın hiçbir zaman 31 günü olmadığından hiç tetiklenmez. Çoğu doğrulayıcı yalnızca sözdizimini kontrol eder, anlamsal doğruluğu değil. Ulaşılamaz zamanlamaları yakalamak istiyorsanız sonraki N çalışma zamanlarını hesaplayın ve listenin boş olup olmadığını kontrol edin.
6 veya 7 alanlı bir cron ifadesini nasıl doğrularım?
Standart POSIX cron 5 alan kullanır. Quartz Scheduler başa bir saniye alanı ekler (6 alan) ve sona isteğe bağlı bir yıl alanı ekler (7 alan). AWS EventBridge 6 alan kullanır. Bu doğrulayıcı standart 5 alanlı formatı kontrol eder. Quartz veya EventBridge ifadelerini doğrulamak için Node.js'te cron-parser (extended seçeneğiyle) veya Java'da quartz-cron gibi genişletilmiş formatı destekleyen bir kütüphane kullanın.
Cron ifadelerinde günler ve aylar için isimler kullanabilir miyim?
Çoğu cron uygulaması aylar için (JAN-DEC) ve haftanın günleri için (SUN-SAT) üç harfli İngilizce kısaltmaları kabul eder. Bunlar crontab'da büyük/küçük harf duyarsızken diğer sistemlerde harf duyarlı olabilir. Adlandırılmış değerler tüm platformlarda aralıklarda kullanılamaz: MON-FRI crontab'da çalışır ancak her kütüphanede çalışmaz. Taşınabilirlik önemliyse sayısal değerler kullanın (Pazartesiden Cumaya: 1-5).
Cron ifadem crontab'da çalışıyor ama Kubernetes'te neden başarısız oluyor?
Kubernetes CronJob'ları crontab ile aynı 5 alanlı formatı kullanır ancak daha katı doğrulama yapan Go cron kütüphanesi tarafından ayrıştırılır. crontab'ın tolere ettiği ifadeler (sondaki boşluklar veya her iki ayın-günü ve haftanın-günü alanlarının joker karakter olmayan değerlere sahip olması) farklı davranabilir. Kubernetes ayrıca düğümün yerel saat dilimi yerine varsayılan olarak controller-manager saat dilimini (genellikle UTC) kullanır. İfadeyi her zaman dağıtım yapacağınız özgün zamanlayıcıya göre doğrulayın.
CI/CD pipeline'ında cron ifadelerini nasıl doğrularım?
Dağıtımdan önce çalışan bir doğrulama adımı ekleyin. Node.js projesinde cron-parser veya cron-validator'ı, yapılandırmanızdan cron dizelerini okuyup ayrıştırma hatası olmadan çalıştıklarını doğrulayan bir test dosyasında kullanın. Python'da croniter.is_valid() kullanın. Kabuk betiğinde doğrulama fonksiyonunu çağırın ve başarısızlık durumunda sıfırdan farklı bir kodla çıkın. Bu, yazım hatalarını ve kopyala-yapıştır hatalarını üretime ulaşmadan yakalar.
Cron doğrulama ile cron linting arasındaki fark nedir?
Doğrulama, bir ifadenin sözdizimsel olarak doğru olup olmadığını kontrol eder: alan sayısı doğru mu, değerler aralıkta mı, operatörler geçerli mi? Linting daha ileri giderek teknik olarak geçerli olan ancak muhtemelen hatalı olan durumları kontrol eder: hiç çalışmayacak zamanlamalar (Şubat 31), örtüşen işler, beklenen aralıkları atlayan adım değerleri (*/7 her saat sıfırlanır) veya saat dilimi belgesi olmayan zamanlamalar. Doğrulama 'bu ayrıştırılabilir mi?' sorusunu yanıtlar. Linting 'bu gerçekten istediğiniz şey mi?' sorusunu yanıtlar.