araç köşesi

Cron İfadesi Açıklama: Crontab Satırını Okunur Cümleye Çevirin

Cron ifadesinin ne zaman çalıştığını Türkçe cümleyle, alan alan dökümle ve sonraki çalışma tarihleriyle görün

Verileriniz sizde kalır. Dönüşüm tarayıcının içinde yapılır, hiçbir şey sunucuya gitmez.

Nasıl çalışır?

Cron, sunucuda bir işi belirli zamanlarda kendiliğinden çalıştıran zamanlayıcıdır; hosting panelindeki (cPanel, Plesk) "Cron Jobs" ekranı da aynı ifadeyi ister. İfade beş alandan oluşur: dakika, saat, ayın günü, ay ve haftanın günü. Kendi yazdığınız ya da bir rehberden kopyaladığınız ifadeyi sol panele yapıştırın; sağ panelde ne zaman çalışacağı cümleyle yazılır. Örneğin "*/15 9-17 * * 1-5" satırı "Her 15 dakikada bir, saat 09:00 ile 17:59 arası, Pazartesi–Cuma günleri" olarak açıklanır ve bugünden sonraki ilk çalışma saatleri (13:15, 13:30…) listelenir. Satırın sonunda bir komut varsa (/home/kullanici/yedek.sh gibi) ayrıca gösterilir; # ile başlayan yorum ve MAILTO= gibi ayar satırları atlanır, böylece crontab -l çıktısının tamamını yapıştırabilirsiniz. Sonraki çalışma tarihleri cihazınızın saatine göre hesaplanır; sunucunuz başka bir saat diliminde çalışıyorsa (çoğu yabancı sunucu UTC kullanır, Türkiye saati UTC+3'tür) gerçek çalışma o farkla kayar.

Bu araç cron ifadesi, cron expression generator, cpanel cron job zamanlama, crontab every 5 minutes, quartz cron ifadesi aramalarıyla da biliniyor.

Cron nedir?

Cron, Linux ve Unix sunucularda arka planda sürekli çalışan ve bir işi önceden belirlenen dakikada kendiliğinden başlatan zamanlayıcı servistir. Yedek almak, e-posta kuyruğunu boşaltmak, bir web sitesinin günlük raporunu üretmek gibi tekrarlanan işler için kullanılır. Hosting panellerindeki "Cron Jobs" ekranı bu servise satır ekleyen bir arayüzdür.

Crontab nedir?

Crontab (cron table), her kullanıcının zamanlanmış işlerini tutan metin dosyasıdır; crontab -e ile düzenlenir, crontab -l ile listelenir. Her satır beş zaman alanı ve ardından çalışacak komuttan oluşur. # ile başlayan satırlar yorumdur, MAILTO= gibi satırlar ise çıktının kime e-postalanacağı gibi ayarları taşır.

Linux cron ile Quartz cron arasındaki fark nedir?

Linux cron beş alanla dakika hassasiyetinde çalışır; Quartz (ve Java'daki Spring) başa saniye alanı ekler, böylece "her 10 saniyede bir" gibi zamanlamalar yazılabilir. Quartz ayrıca isteğe bağlı yıl alanı, ayın son günü için L, en yakın hafta içi gün için W ve "ayın 2. Pazartesi'si" için # işaretini tanır. En sık hataya yol açan fark haftanın günü numarasıdır: Quartz'da 1 Pazar'dır, Linux'ta 1 Pazartesi.

Ayın günü ile haftanın günü birlikteyse: cron'un VEYA kuralı

"0 0 1,15 * 1" satırını okuyan çoğu kişi "ayın 1'i ve 15'i, eğer Pazartesi'ye denk gelirse" diye anlar. Linux cron böyle çalışmaz: ayın günü ve haftanın günü alanlarının ikisi de kısıtlıysa, ikisinden biri tuttuğunda iş çalışır. Bu satır her ayın 1'inde, 15'inde ve ayrıca her Pazartesi gece yarısı çalışır. Araç bu durumda cümleye "veya" yazar ve altına bir not ekler.

Kuralın bir istisnası daha vardır: alan yıldızla başlıyorsa ("*/2" gibi) cron onu kısıtlanmamış sayar ve iki alanın birlikte tutmasını ister. "0 0 */2 * 1" satırı bu yüzden "tek günlerden Pazartesi'ye denk gelenler" anlamına gelir. Bazı JavaScript kütüphaneleri bu ayrıntıyı uygulamaz; bu sayfa Linux'taki cron servisinin (cronie, Vixie cron) davranışını izler. Spring'de ise kural tam tersidir: iki alan her zaman birlikte tutmalıdır.

Linux, Spring ve Quartz yazımı: hangisini kullanıyorsunuz?

Hosting panelinizdeki Cron Jobs ekranı, Linux sunucudaki crontab dosyası ve GitHub Actions'taki schedule satırı beş alanlı Linux yazımını kullanır. Java dünyasında Spring'in @Scheduled ifadesi başa bir saniye alanı ekler ve altı alan ister. Quartz da saniyeyle başlar, ayrıca isteğe bağlı yedinci bir yıl alanı alır, ayın günü ile haftanın gününden birine "?" yazılmasını zorunlu tutar ve haftanın günlerini 1'den başlatır: Quartz'da 1 Pazar, 2 Pazartesi'dir; Linux ve Spring'de ise 1 Pazartesi'dir.

Otomatik seçim alan sayısına ve işaretlere bakar: "?", "L", "W" ya da "#" görürse Quartz, altı alan görürse Spring, beş alan görürse Linux kabul eder. Hangi biçimin seçildiği çıktıda yazılıdır. Altı alanlı bir Linux satırının son kelimesi komut olabileceği için ("0 5 * * * yedek.sh") emin değilseniz yazımı elle seçin; özellikle Quartz ifadesinde haftanın günü numarası yanlış biçimde bir gün kayar.

Sık kullanılan cron ifadeleri

Aşağıdaki satırlar en çok aranan zamanlamaların hazır karşılığıdır; birini kopyalayıp sol panele yapıştırarak sonraki çalışma tarihlerini görebilir, sonra kendi saatinize göre değiştirebilirsiniz.

  • */5 * * * * — Her 5 dakikada bir
  • 0 * * * * — Her saat başı
  • 0 3 * * * — Her gece saat 03:00
  • 30 8 * * 1-5 — Hafta içi her sabah 08:30
  • 0 9 * * 1 — Her Pazartesi 09:00
  • 0 0 1 * * — Her ayın 1'i gece yarısı (@monthly)
  • 0 0 1 1 * — Her yıl 1 Ocak gece yarısı (@yearly)

Sık sorulanlar

Cron ifadesi nasıl okunur?

Soldan sağa beş alan vardır: dakika (0-59), saat (0-23), ayın günü (1-31), ay (1-12) ve haftanın günü (0-7; 0 ve 7 Pazar). Yıldız "her değer", virgül liste (1,15), tire aralık (9-17), eğik çizgi adım (*/15 = 15'te bir) demektir. "30 2 * * *" her gün saat 02:30 anlamına gelir.

Her 5 dakikada bir çalışan cron nasıl yazılır?

"*/5 * * * *" yazın. Dakika alanındaki */5, 0'dan başlayıp 5'er artan dakikalarda (0, 5, 10 … 55) çalıştırır. Yalnız mesai saatlerinde istiyorsanız saat alanını kısıtlayın: "*/5 9-18 * * *".

Cron işim neden yazdığım saatte çalışmıyor?

En sık sebep saat dilimidir: sunucu UTC ile çalışıyorsa "0 9 * * *" Türkiye saatiyle 12:00'de çalışır. Sunucuda date komutuyla saati kontrol edin ya da ifadeyi farka göre yazın. İkinci sık sebep, ayın günü ile haftanın gününün birlikte yazılmasıdır; cron ikisinden birini yeterli sayar.

Cron ifadesinde @daily ve @reboot ne demek?

@daily (ya da @midnight) "0 0 * * *" ile aynıdır: her gün gece yarısı. @hourly, @weekly, @monthly ve @yearly de benzer kısaltmalardır. @reboot ise takvime bağlı değildir; sunucu ya da cron servisi her başladığında bir kez çalışır, bu yüzden sonraki çalışma zamanı hesaplanamaz.