Cron İfadesi Nasıl Yazılır? Adım Adım Rehberi

ReferansYayın: Güncellendi: 8 dk okumaHazırlayan: cronjob.com.tr Editörleri

Cron ifadesi, bir görevin hangi takvim anlarında tetikleneceğini belirten kısa bir zamanlama metnidir. Linux biçiminde 30 9 * * 1-5, hafta içi her gün 09:30 demektir. İfade komutun kendisi değildir; yalnızca ne zaman başlayacağını tarif eder. Komut veya HTTP adresi kullanılan platformda ayrıca tanımlanır.

Bu rehberde Türkçe bir isteği alanlara ayıracak, sonucu tersine okuyacak ve hatalı beklentileri takvim örnekleriyle yakalayacaksınız. Örneklerin ana biçimi Linux'un beş alanlı düzenidir. Özel karakterlerin bütün kuralları için crontab sözdizimi referansına bakın. Burada öncelik karakter ezberlemek değil, istediğiniz zamanlamayı doğru kurmaktır.

Önce isteği ölçülebilir bir cümleye dönüştürün

“Mesai saatlerinde sık çalışsın” yeterli bir tanım değildir. Günleri, ilk ve son tetikleme saatini, dakika aralığını ve saat dilimini yazın. Örneğin “Europe/Istanbul saatine göre pazartesiden cumaya, 09:00 dahil 17:00 hariç, yarım saatte bir” ifadesi test edilebilir. Son sınırın dahil olup olmadığı özellikle önemlidir; 17 saatini seçmek 17:30 çalışmasını da ekleyebilir.

Takvim zamanlaması ile son çalışmadan itibaren bekleme farklı ihtiyaçlardır. “Her gün 09:00” bir takvim koşuludur. “İş tamamlandıktan 24 saat sonra” ise bitiş zamanına bağlıdır ve tek bir klasik cron ifadesiyle anlatılmaz.

Adım adım Türkçe cümleden cron ifadesine

Örneğimiz şu olsun: “Hafta içi 09:00 ile 16:30 arasında, yarım saatte bir stok kontrolü.” Bu işin 17:00'de başlamasını istemiyoruz. Sunucunun saat dilimini ayrıca doğruladığınızı varsayarak aşağıdaki sırayı izleyin.

  1. Dakikaları seçin. Her saatte 00 ve 30 istiyoruz; dakika alanı */30 olur. Böylece saniye değil, saat içindeki iki dakika seçilir.
  2. Saatleri seçin. İlk saat 9, son saat 16 olduğundan 9-16 yazın. Aralık uçları dahildir; 17 yazmak son saatte ek çalışmalara neden olur.
  3. Ayın gününü serbest bırakın. Belirli bir ay tarihi istemediğimiz için üçüncü alana yıldız koyun. Haftanın gününü daha sonra daraltacağız.
  4. Ayı serbest bırakın. İş yılın bütün aylarında geçerli; dördüncü alan yıldız olur. Sadece yaz ayları gibi bir kısıt olsaydı burada tanımlanırdı.
  5. Haftanın gününü seçin. Linux örneğinde pazartesi ile cuma için 1-5 kullanın. Resmî tatiller bu alan tarafından bilinmez; tatil kontrolünü uygulamada yapmanız gerekir.
  6. Birleştirin ve sınırları sınayın. Beş alanı aşağıdaki sırayla yazın. Cuma 16:30 seçilmeli, cuma 17:00 ve cumartesi 09:00 seçilmemelidir.
# dakika saat ayın_günü ay haftanın_günü
*/30 9-16 * * 1-5

# Kullanıcı crontab tablosunda komut ayrıca eklenir:
*/30 9-16 * * 1-5 /usr/local/bin/stok-kontrol

İfadeyi bir araca yapıştırdığınızda yalnızca beş zaman alanını girin; tam crontab satırı isteyen alana ise komutu da ekleyin. Kullanıcı tablosunun nasıl kaydedildiği için crontab dosyası ve komutu rehberini kullanın.

Cron ifadesini tersine okuma pratiği

Bir ifadeyi okurken önce dakika ve saati birlikte saate çevirin. Sonra ayın günü, ay ve haftanın günü kısıtlarını ekleyin. Aşağıdaki örnekleri açıklamayı görmeden bir cümleye dönüştürmeye çalışın.

İfadeDoğru okumaSınır kontrolü
15 14 1 * *Her ayın ilk günü 14:15Ayın ikinci günü çalışmaz.
0 22 * * 1-5Hafta içi 22:00Pazar akşamı seçilmez.
0 */3 1,15 * *Ayın 1 ve 15'inde, 00:00'dan başlayarak üç saatte birSon tetikleme 21:00 olur.
*/10 8-12 * * 0Pazar günleri 08:00–12:50 arasında on dakikada bir12:00 son çalışma değildir.
0 0 1 1 *Her yıl 1 Ocak gece yarısıYalnızca ocak ayı seçilmiştir.

Birden fazla alanı listelediğinizde eşleşmeler birleşir. 0,30 9,17 * * * sadece 09:00 ve 17:30 anlamına gelmez; 09:30 ve 17:00 da seçilir. İki ayrı saat-dakika çifti gerekiyorsa ayrı zamanlama satırları kullanın.

İki gerçek senaryo: rapor ve stok kontrolü

Günlük kapanış raporu

Satış verileri gece kapandıktan sonra her gün 02:15'te rapor üretmek istiyorsanız 15 2 * * * kullanabilirsiniz. Önceki günün verilerini seçme sorumluluğu rapor kodundadır; cron yalnızca başlatma anını belirler. Sunucu kapalıysa kaçırılan raporun nasıl üretileceğini ayrıca tasarlayın. Dosya varlığını ve raporun ait olduğu günü doğrulamak, yalnızca süreç kaydına bakmaktan daha anlamlıdır.

Mesai içinde yarım saatlik stok kontrolü

Yukarıdaki */30 9-16 * * 1-5 ifadesi mesai dışındaki gereksiz kontrolleri azaltır. Her iş gününde 16 tetikleme anı seçer: sekiz saatin her birinde iki dakika. Bir kontrol yarım saatten uzun sürerse sonraki tetikleme yine gelebilir. Kilit kullanın ve aynı stok hareketini iki kez uygulamayan bir iş tasarlayın; ifade tek başına çakışmayı engellemez.

Çözümlü cron alıştırmaları

Alıştırma 1: Salı ve perşembe 10:45

Soru: Her hafta yalnızca bu iki günde tek çalışma nasıl yazılır? Çözüm: 45 10 * * 2,4. Dakika sabit 45, saat sabit 10, haftanın günü iki değerli listedir. Ayın günü alanını serbest bırakın; ay tarihine bağlı bir koşul istemiyoruz.

Alıştırma 2: Her ayın 1 ve 15'inde 06:05

Soru: Haftanın gününden bağımsız iki tarihte çalışma nasıl yazılır? Çözüm: 5 6 1,15 * *. İki tarih üçüncü alandadır. Son alana pazartesi gibi bir değer eklemek bu isteği iyileştirmez; Linux'taki gün eşleştirme mantığı nedeniyle başka çalışmaları da seçebilir.

Alıştırma 3: Hafta içi yalnızca 09:00 ve 17:30

Soru: İki farklı dakika-saat çiftini nasıl korursunuz? Çözüm: 0 9 * * 1-5 ve 30 17 * * 1-5 olarak iki satır kullanın. Tek satırdaki iki liste dört kombinasyon üretirdi. Her satırda aynı komutu kullanabilirsiniz; gereksiz çift çalışmayı doğrulama sırasında kontrol edin.

Alıştırma 4: Kesintisiz her 90 dakikada bir

Soru: Bunu dakika alanına */90 yazarak çözebilir misiniz? Çözüm: Hayır; dakika alanı 0–59 aralığındadır ve adımlar alan sınırında yeniden başlar. Sabit geçen süre ihtiyacı için aralık destekleyen zamanlayıcı değerlendirin. Başlangıç anı ve yaz saati davranışı tanımlanmadan günlük saat listesi aynı gereksinim kabul edilmemelidir.

Linux, Spring, Quartz ve bulut platformları

Altı alan gördüğünüzde ilk alanın mutlaka saniye olduğunu düşünmeyin. Önce platform belgesindeki alan sırasını bulun. Aşağıdaki tablo her gün 03:00 örneğini karşılaştırır; Linux ifadesinin başına ya da sonuna rastgele bir sıfır eklemek güvenli dönüşüm yöntemi değildir.

Spring uygulamasına ifade taşıyorsanız Spring Boot @Scheduled cron alanları ve saat dilimi örneklerini kullanın; beş alanlı Linux satırına yalnızca komut eklemek yerine saniye alanını başa eklemeniz gerekir. Sık kullanılan Linux desenlerini kurulum sırasında hızlıca karşılaştırmak için de beş alanlı crontab komut ve ifade listesi yanınızda bulunabilir.

PlatformAlan düzeni03:00 örneği
Linux cronDakika, saat, ayın günü, ay, haftanın günü0 3 * * *
Spring zamanlamaSaniye ile başlayan altı alan; yıl alanı yok0 0 3 * * *
QuartzSaniye ile başlayan altı zorunlu alan, isteğe bağlı yıl0 0 3 * * ?
AWS EventBridge SchedulerDakika ile başlayan, yıl ile biten altı alan; saniye yokcron(0 3 * * ? *)
GitHub ActionsBeş alan; zamanlama davranışı platforma bağlı0 3 * * *

Spring belgesi altı alanı, Quartz öğreticisi ise isteğe bağlı yıl alanını açıklar. Sayısal hafta günü anlamları da her ayrıştırıcıda aynı değildir; platform değiştirirken gün adlarını veya sayıları yeniden doğrulayın. Quartz'taki soru işaretini Linux ifadesine taşımayın.

AWS EventBridge Scheduler belgesine göre saat dilimi seçilebilir; gün alanlarında yıldız ve soru işareti kullanımının kendine ait kuralları vardır. Kurulum adımları için AWS cron rehberini okuyun. GitHub Actions belgesinde varsayılan saat dilimi UTC'dir; timezone ile IANA saat dilimi de belirtilebilir. En kısa aralık beş dakikadır ve yoğunluk nedeniyle zamanlanan çalışma gecikebilir. Bu platformu dakik çalıştırma garantisi gibi yorumlamayın.

Sık hatalar ve doğrulama yöntemi

Dakika ile saati karıştırmak

3 * * * * gece 03:00 değil, her saatin üçüncü dakikasıdır. Gece üç için 0 3 * * * yazın. Kaydetmeden önce ifadeyi tek bir Türkçe cümle olarak okuyun; “her saat” sözü istemeden ortaya çıkıyorsa ilk iki alanı tekrar kontrol edin.

Adımı geçen süre saymak

*/35 * * * * her saat 00 ve 35 dakikalarını seçer. 10:35 sonrası 11:00 geldiğinden arada 25 dakika vardır; sürekli 35 dakikalık aralık oluşmaz. Linux adımları alan içinde değerlendirilir. Tam geçen süre istiyorsanız takvim ifadesi yerine uygun aralık mekanizmasını seçin.

Ayın günü ve haftanın gününü VE sanmak

Vixie/Cronie tarzı Linux cron'da iki gün alanı da daraltıldığında 0 9 15 * 5, ayın 15'ini ve ayrıca cumaları seçer. “Yalnızca 15'i cumaya denk gelirse” koşulu değildir. Bu kesişim için uygun bir haftalık tetikleme seçip ay tarihi koşulunu betikte kontrol edebilirsiniz; uygulamanızın iş kuralını açıkça test edin.

bad minute veya alan sayısı hatası

Dakika alanına 60 yazmak geçersizdir. Spring için beş alan göndermek de alan sayısı hatasına yol açar; tam ileti sürüme göre değişebilir. Önce hedef ayrıştırıcıyı ve alan sayısını doğrulayın, sonra aralıkları kontrol edin. Linux için hazırlanan bir aracın Quartz doğrulaması yaptığını varsaymayın.

Geçerli ama hiç eşleşmeyen tarih

0 9 31 2 * gibi bir ifade şubatta bulunmayan bir günü seçer. Yalnızca sözdizimi kontrolü yeterli değildir. cron ifadesi oluşturucu veya ifade açıklayıcı ile sonraki zamanları inceleyin; ay sonu, hafta sonu ve seçilen saat dilimini kapsayan örnekleri doğrulayın. Gerçek görevi önce zararsız bir çıktı ile deneyin. Linux kurallarının birincil başvurusu crontab(5) belgesidir.

cronjob.com.tr panelinde ifadeyi kullanma

İşiniz HTTP ile tetiklenebiliyorsa yerel crontab yerine panelde beş alanlı ifadeyi kullanabilirsiniz. Örneğin stok kontrolü için https://example.com/tasks/stok-kontrol uç noktası oluşturun. Uygulama POST isteğindeki X-Cron-Token gizli header değerini doğrulasın; yanlışsa işi başlatmadan 401 veya 403 dönsün. Token'ı URL'ye eklemeyin ve doğrulamayı yalnızca adresin gizli olmasına dayandırmayın.

  1. Panelde URL, POST metodu ve özel X-Cron-Token header değerini girin.
  2. Zamanlama alanına */30 9-16 * * 1-5 yazın; komut veya kullanıcı adı eklemeyin.
  3. İşin saat dilimini seçin; varsayılan Europe/Istanbul değerini kontrol edin.
  4. Manuel çalıştırın, HTTP sonucunu ve stok kontrolünün uygulama kaydını inceleyin.

Cron ifadeli işlerde yanıt bekleme süresi 290 saniyedir; ifadenin yarım saat seçmesi bu sınırı uzatmaz. Hazır bir dakikalık aralıkta bekleme 55 saniyedir. Bağlantı hatası olmadan HTTP 200–399 yanıtları başarılı sayılır. Ardışık hata eşiği varsayılan 3 olup 1–20 arasında ayarlanabilir. Eşik aşılınca erişim sorunu, düzelince kesinti süresiyle düzeldi e-postası gönderilir; aynı işte bildirimler arasında en az 60 dakika vardır. Uygulama işi kuyruğa alıyorsa HTTP başarısı tamamlanmayı değil kabulü gösterebilir.

Sıkça Sorulan Sorular (SSS)

Cron ifadesine saniye ekleyebilir miyim?

Linux'un beş alanlı biçiminde saniye alanı yoktur. Spring ve Quartz saniye ile başlar; AWS EventBridge Scheduler ise altı alan kullanmasına rağmen saniye içermez.

Her 24 saatte bir ile her gün aynı saatte çalışmak aynı mı?

Her zaman aynı değildir. Cron takvimdeki saatleri seçer; geçen süreye göre beklemez. Saat dilimi ve yaz saati geçişleri günlük çalışmalar arasındaki gerçek süreyi değiştirebilir.

Cron hafta içi ifadesi resmî tatilleri dışlar mı?

Hayır. Haftanın günü alanı tatil takvimini bilmez. Resmî tatil istisnalarını uygulamada ayrıca kontrol etmelisiniz.

İki farklı saati tek satırda yazabilir miyim?

Dakikaları aynıysa saat listesi kullanılabilir. Dakika-saat çiftleri farklıysa listeler fazladan kombinasyonlar üretebilir; ayrı zamanlama satırları daha açık bir çözümdür.

İfadenizle HTTP görevi oluşturun

cronjob.com.tr ücretsizdir; kayıtta kredi kartı istenmez. En kısa çalışma aralığı 60 saniyedir.

Ücretsiz Başla →

İlgili Rehberler