Cron İfadesi Oluşturucu

Menülerden crontab zamanı kurun — dakika, saat, gün, ay, hafta günü — Türkçe okunuşu ve hazır şablonlarla.

1.010 görüntülenme

Cron İfadesi * * * * *
Okunuşu

Nasıl Çalışır

Bir cron ifadesi, tekrarlayan bir işi her zaman aynı sırada, boşlukla ayrılmış beş alanla zamanlar: dakika · saat · ayın günü · ay · haftanın günü. Her alan bir değer veya dört özel karakterden birini kabul eder: * "her olası değer" demektir; */15 "alanın en küçük değerinden başlayarak her 15 birimde bir" demektir; 1,15,30 açık bir listedir; 1-5 kapsayıcı bir aralıktır. Soldan sağa okunduğunda 0 9 * * 1-5, "9. saatin 0. dakikasında, ayın her gününde, her ayda, 1'den 5'e kadar haftanın günlerinde" demektir — yani hafta içi (Pazartesi-Cuma) saat 09:00. */10 * * * * gün boyu her 10 dakikada bir çalışır, 0 0 1 * * ise her ayın 1'inde gece yarısı çalışır.

Menülerden bir zamanlama kurun; bu araç beş alanı sizin için birleştirir, ardından sonucu düz Türkçe bir cümleye çevirir, böylece crontab dosyasına veya bulut zamanlayıcısına yapıştırmadan önce sağlığını kontrol edebilirsiniz. En sık başvurulan zamanlamalar için — her dakika, saatlik, günde bir kez belirli saatte, yalnız hafta içi — hazır şablonlar tek tıkla uzağınızda.

Bilinmesi Gerekenler

Cron anlambiliminde en büyük sürpriz şudur: ayın günü ile haftanın günü ikisi birden kısıtlandığında (hiçbiri * bırakılmadığında), ikisi VE değil VEYA ile birleşir. Yani 0 0 15 * 5, "15'i, eğer Cuma'ya denk gelirse" anlamına gelmez — "ayın 15'i VEYA her Cuma" anlamına gelir ki bu çoğu kişinin niyetlediğinden çok daha sık çalışır. Yalnız ikisinden birini önemsiyorsanız diğerini * bırakın.

Haftanın günü numaralandırması da şaşırtabilir: çoğu cron gerçeklemesinde hem 0 hem 7 pazar demektir, pazartesi ise 1'dir. Ve en önemlisi, cron her zaman sunucunun ayarlı saat diliminde çalışır — bulut altyapısında genellikle UTC — sizin bulunduğunuz saat diliminde değil; bu yüzden "sabah 9" için kurduğunuz bir iş, sunucunun saat dilimini doğrulamadan beklediğinizden farklı bir yerel saatte çalışabilir. GitHub Actions'ın schedule:'ı, AWS EventBridge ve Kubernetes CronJob gibi bulut zamanlayıcılarının hepsi bu aynı beş alanlı sözdizimini temel alır, bazen satıcıya özgü uzantılarla (isteğe bağlı saniye alanı gibi) — burada kurduğunuz zamanlama, bu platformlara neredeyse doğrudan aktarılır.

Son bir not: crontab dosyanızı düzenlemek için her zaman crontab -e komutunu kullanın, dosyayı elle bulup metin editörüyle açmayın — bu, kaydettiğinizde zamanlayıcı servisinin değişikliği fark etmesini garanti eder. Bir işin çalışıp çalışmadığından emin değilseniz sistemin cron loglarına (çoğu Linux dağıtımında /var/log/syslog veya journalctl -u cron) bakın; komutun kendisi başarısız olsa bile cron'un işi tetikleyip tetiklemediğini orada görebilirsiniz.

Sıkça Sorulan Sorular

30 saniyede bir nasıl çalıştırırım?

Klasik cron'un en küçük birimi dakikadır. Yaygın çözüm iki satırdır: biri normal, diğeri komutun önüne `sleep 30 &&` ekli — veya saniye destekleyen systemd timer kullanın.

09:00 işim neden garip saatte çalıştı?

Neredeyse her zaman saat dilimi: crontab sunucunun yerel saatinde çalışır (bulutta çoğu kez UTC). Sunucuda `date` ile kontrol edin veya destekleniyorsa CRON_TZ ayarlayın.

İfadeyi güvenle nasıl test ederim?

Önce log komutuna bağlayın: `* * * * * date >> /tmp/cron-test.log`, temposunu doğrulayın, sonra gerçek komutu koyun. Cron ortamı minimaldir — PATH'in yettiğinden de emin olun.

Ayın günü ile haftanın günü ikisi birden ayarlanırsa ne olur?

VE değil VEYA ile birleşirler — `0 0 15 * 5` gibi bir zamanlama ayın 15'inde VE her Cuma çalışır, yalnızca 15'ine denk gelen bir Cuma'da değil. İkisinin kesişimini istiyorsanız cron tek başına bunu ifade edemez; tarihi işin içinde kontrol etmeniz gerekir.

Cron, yaz saati uygulamasını (DST) hesaba katar mı?

Gerçeklemeye bağlıdır, ama klasik cron genellikle DST kaymaları dahil sistem saatinin yerel zamanını izler — bu da "ileri alma" veya "geri alma" saatine denk gelen bir işin o gün sıfır veya iki kez çalışabileceği anlamına gelir. UTC'ye ayarlı sunucular bunu tamamen önler; üretim zamanlayıcılarının çoğunun varsayılan olarak UTC kullanmasının bir nedeni de budur.

Aynı alanda hem aralık hem adım birlikte kullanılabilir mi, örneğin gün aşırı hafta içi için?

Evet — adım yalnızca yıldıza değil bir aralığa da uygulanabilir: haftanın günü alanında `1-5/2`, "Pazartesi-Cuma aralığında bir gün atlayarak" demektir, yani Pazartesi, Çarşamba, Cuma. Bu birleşik aralık/adım biçimi çoğu modern cron gerçeklemesinde (Vixie cron ve systemd dahil) desteklenir, ama en eski POSIX gerçeklemelerinde desteklenmeyebilir — eski bir ortamda güvenmeden önce bir kez test edin.

Yorumlar

Henüz yorum yok — ilk yorumu siz yazın!

Benzer Araçlar