Crontab Guru
Bir cron ifadesi yapıştırın ve ne yaptığının alan alan açıklamasını sade İngilizce alın. Alan sırasını hatırlamanıza ya da aralıkları aramanıza gerek yok: guru beş alanın her birini (dakika, saat, ayın günü, ay ve hafta günü) tek tek ele alır ve ifadeyi soldan sağa okur. Bir crontab satırını dağıtmadan önce kontrol etmek ya da devraldığınız bir satırı açıklamak için kullanışlıdır.
Guru nasıl kullanılır
-
1
İfadeyi yapıştırın
Herhangi bir standart 5 alanlı cron ifadesini (örneğin `0 9 * * 1-5`) giriş alanına kopyalayın.
-
2
Açıklama isteyin
Explain Cron düğmesine tıklayın; araç her alanın satır satır açıklamasını verir: dakika, saat, ayın günü, ay ve hafta günü.
-
3
Açıklamayı okuyun
Açıklama İngilizce üretilir; örneğin "Minute: every 5 minutes" ya da "Hour: from 9 through 17."
-
4
Dağıtmadan önce kontrol edin
Zamanlamanın istediğiniz şeyi yaptığından emin olmak için açıklamayı kullanın; ardından crontab'ınıza, CI yapılandırmanıza ya da Kubernetes manifestonuza koyun.
Alan kopya kâğıdı
┌───────────── dakika (0-59)
│ ┌─────────── saat (0-23)
│ │ ┌───────── ayın günü (1-31)
│ │ │ ┌─────── ay (1-12 ya da JAN-DEC)
│ │ │ │ ┌───── hafta günü (0-6 ya da SUN-SAT; Pazar = 0 ya da 7)
│ │ │ │ │
* * * * *
Cron ifadelerindeki operatörler
| Operatör | Anlamı | Örnek |
|---|---|---|
* |
Her değer | * * * * * |
, |
Değer listesi | 0,15,30,45 |
- |
Aralık | 9-17 |
/ |
Adım (başlangıç/adım) | */5, 0-30/5 |
L |
Son (ayın son günü ya da son hafta günü, Quartz) | L, 5L |
W |
En yakın hafta günü | 15W (Quartz) |
# |
Ayın n’inci hafta günü | 1#3 (Quartz) |
? |
Belirli değer yok | Yalnızca Quartz |
Okuma sırası önemlidir
0 */2 * * 1-5 soldan sağa şöyle okunur: dakika 0, her 2 saatte bir, ayın herhangi bir günü, herhangi bir ay, Pazartesiden Cumaya. İnsanlar bazen alışkanlıkla alanları sağdan sola okur ve kafaları karışır; her zaman dakikadan başlayın.
“Her X dakikada bir” tuzağı
*/10 * * * * 0, 10, 20, 30, 40, 50. dakikalarda tetiklenir, “iş ne zaman oluşturulduysa ondan itibaren her 10 dakikada bir” değil. Cron adımları her zaman alanın aralığının başından ölçer. Bir işi 12:03’te dağıtırsanız, ilk çalışma 12:10’da olur, 12:13’te değil.
Gerçekten “son çalışmadan N dakika sonra” gerektiren işler için kalıcı bir zamanlayıcılı bir scheduler kullanın (OnUnitActiveSec ile systemd zamanlayıcıları ya da saklanan bir son çalışma zaman damgasıyla uygulama düzeyinde zamanlama).
Bilinmeye değer cron tuzakları
- Ayın günü + hafta günü her ikisi de ayarlı: çoğu cron uygulaması bunu OR davranışı olarak ele alır, muhtemelen istediğiniz şey değil.
- 0 adımı:
*/0geçersizdir. - Aralık başa sarar: saatler için
22-2klasik cronda çalışmaz;22-23,0-2kullanın. - 30 Şubat:
0 0 30 2 *gibi bir zamanlama asla tetiklenmez. - DST belirsizliği: 2 ile 3 arasında zamanlanan işler DST geçiş günlerinde iki kez ya da sıfır kez tetiklenebilir.
Cron ve modern zamanlayıcılar
Unix cron hâlâ her yerde, ama kritik bir şey için muhtemelen şunları istersiniz:
- systemd zamanlayıcıları: kaçırılan çalışmaları yakalar, rastgele kaydırmaları destekler, birim dosyalarından okur.
- Kubernetes CronJob: bildirimsel, yeniden denemeler, 1.25+’ta saat dilimi farkında.
- Airflow / Prefect / Dagster: bağımlılıkları, yeniden denemeleri, geri doldurmaları, gözlemlenebilirliği olan işler için.
- GitHub Actions zamanlaması: 5 alanlı cron, yalnızca UTC, minimum 5 dakikalık aralık, en iyi çaba teslimi.
Cron, başlı başına harika bir biçimdir ama kaçırılmaması gereken işler için zayıf bir zamanlayıcıdır.
Sık Sorulan Sorular
Çünkü standart cronda hafta günü 0 Pazardır (7 de Pazardır, her iki geleneği destekler). Pazartesi 1’dir. Quartz hafta günlerini 1-7 numaralandırır, Pazar = 1; bu da lehçeler arasında geçiş yapanları sık tökezletir.
Klasik Unix cron sunucunun yerel saat diliminde çalışır, /etc/timezone ne diyorsa. Kubernetes CronJob, GitHub Actions ve çoğu bulut zamanlayıcısı varsayılan olarak UTC’de çalışır. Her zaman doğrulayın ve mümkünse DST sürprizlerinden kaçınmak için UTC kullanın.
Klasik cron bunu doğrudan ifade edemez. Geçici çözüm: her Pazartesi çalıştırın ve tarihi betiğin içinde kontrol edin: [ $(date +%d) -le 7 ] && ./job.sh. Quartz bunu 1#1 ile yerel olarak destekler.
Hayır. Her zamanlamanın kendi satırı gerekir. Ama birkaç zamanlamayı listelerle tek bir satırda birleştirebilirsiniz: 0 9,17 * * * sabah 9’da ve 17’de çalışır. Tek satır olarak ifade edilemeyen zamanlamalar için aynı komutu gösteren birden fazla satır ekleyin.
İlgili Araçlar
Gradyan Duvar Kağıdı Oluşturucu
Dizüstü bilgisayar, telefon veya Zoom arka planları için bulanık üç renkli gradyan duvar kağıtları oluşturun. Açıyı ve bulanıklığı rastgele belirleyin ya da elle ayarlayın.
JSON Biçimlendirici
JSON metnini 2 veya 4 boşlukla okunabilir hale getirmek, kompakt çıktıya küçültmek ya da sonucu kopyalamadan önce söz dizimini hızlıca kontrol etmek için yapıştırın.
HEX Renk Seçici
HEX rengi seçin veya girin; RGB, HSL, yaklaşık CMYK, bağıl parlaklık ve beyaz-siyah kontrast oranlarını görün.
FPS Sayacı
requestAnimationFrame ile tarayıcı FPS değerini ölçün: yumuşatma, en düşük ve en yüksek kare hızı, uyarı eşiği ve isteğe bağlı grafik. Yerel çalışır, yükleme ve API yoktur.
HAR Dosyası Görüntüleyici
HAR ağ kayıtlarını yerel olarak açın, istekleri filtreleyin, maskeli üstbilgileri ve zamanlama aşamalarını inceleyip temizlenmiş özetleri yüklemeden dışa aktarın.
Renk Paleti Jeneratörü
Temel bir HEX renginden monokromatik, analog, tamamlayıcı, triadik veya tetradik paletler oluşturun ve kopyalamaya hazır CSS değişkenleri alın.