Cron İfadesi Ayrıştırıcı

Biçim: dakika saat ayın-günü ay haftanın-günü

Bir crontab devralırsınız ve 0 */2 * * 1-5, 15 4 1 * *, */30 8-18 * * * ile doludur. Bu ayrıştırıcı standart 5 alanlı bir cron ifadesini alır ve sade İngilizce bir açıklama (“every 2 hours on weekdays”) döndürür; ayrıca gerçekten tetikleneceği sonraki 5 zamanı verir. Eski zamanlamaları anlamak ve yeni bir tanesini dağıtmadan önce doğrulamak için kullanışlıdır.

Bir cron ifadesi nasıl ayrıştırılır

  1. 1

    İfadeyi yapıştırın

    Standart 5 alanlı bir ifade (`* * * * *`): dakika, saat, ayın günü, ay ve hafta günü.

  2. 2

    İngilizce açıklamayı okuyun

    Ayrıştırıcı her alanı sade İngilizceye çevirir, örneğin "At minute 0, every 2 hours, on day(s) of week 1-5."

  3. 3

    Sonraki çalışma önizlemesiyle doğrulayın

    Gelecek 5 tetikleme zamanı. Niyetinizle eşleşmiyorsa ifadeyi düzeltin.

  4. 4

    Geçersiz alanları düzeltin

    Alan sayısı yanlış olan veya değerleri aralık dışında kalan ifadeler, sorunlu alanı belirten bir hatayla reddedilir.

Her alanın çözümlenmesi

Her alanın kendi geçerli aralığı ve özel karakterleri vardır:

Alan Aralık Desteklenen joker karakterler
Dakika 0-59 * , - /
Saat 0-23 * , - /
Ayın günü 1-31 * , - /
Ay 1-12 * , - /
Hafta günü 0-7 * , - /
  • * = her değer (dakika alanındaki * her dakika demektir).
  • 1,5,10 = değer listesi.
  • 1-5 = değer aralığı.
  • */15 veya 0-45/15 = alan aralığının başından sayılan bir adım.
  • Hafta günü 0 ve 7 ikisi de Pazar anlamına gelir, yani her iki kural da kabul edilir. JAN veya MON gibi ay ve gün adları kabul edilmez; sayı kullanın.

Çözümlenmiş örnekler

İfade İngilizce olarak
0 */2 * * 1-5 At minute 0 every 2 hours, Monday through Friday
15 4 1 * * At 04:15 on the 1st day of every month
*/30 8-18 * * * Every 30 minutes between 08:00 and 18:59
0 0 1,15 * * At midnight on the 1st and 15th of every month
0 22 * * 0 At 22:00 every Sunday

Ayrıştırıcının kabul ettikleri

  • Tam olarak 5 alan: dakika, saat, ayın günü, ay ve hafta günü. Saniye (6 alan) veya yıl (7 alan) içeren Quartz ifadeleri reddedilir.
  • Geçerli aralıklar: her değer kendi alanına sığmalıdır; örneğin dakika 0-59, saat 0-23, ayın günü 1-31, ay 1-12 ve hafta günü 0-7.
  • Pozitif adımlar: / sonrasındaki değer pozitif bir sayı olmalıdır (*/0 reddedilir).
  • Adlandırılmış kısayol yok: @daily, @reboot ve benzeri kısayollar kabul edilmez. Önce bunları 5 alanlı biçimine genişletin (örneğin @daily = 0 0 * * *).

Ayın günü ve hafta günü birlikte

Ayın günü ve hafta günü birlikte ayarlandığında, bu ayrıştırıcı yalnızca ikisi de eşleştiğinde çalışma planlar; yani 0 0 1 * MON yalnızca ayın 1’i Pazartesi olduğunda tetiklenir. Çoğu Linux cron uygulaması ise bu iki alanı OR olarak ele alır (hangisi eşleşirse iş çalışır). Bu yüzden ifadeyi gerçekte kullandığınız zamanlayıcıya göre tekrar kontrol edin.

Saat dilimi notu

Önizlemedeki zamanlar UTC olarak çalışan sunucu saatiyle hesaplanır. Crontab’ınız farklı bir saat dilimindeki bir makinede çalışıyorsa, burada gösterilen zamanlar o makinedeki zamanlardan farklı olabilir.

Sık Sorulan Sorular

Hayır. Yalnızca standart 5 alanlı ifadeler kabul edilir. Saniye içeren (6 alan) veya yıl içeren (7 alan) Quartz ifadeleri bir hatayla reddedilir.

Genellikle şunlardan biri: önizleme sunucu saatini (UTC) kullanırken crontab’ınız başka bir saat diliminde çalışıyor, ayın günü ve hafta günü birlikte ayarlanmış (bu ayrıştırıcı ikisinin de eşleşmesini gerektirir) ya da her saat/günün başında yeniden başlayan bir adım değeri.

Evet, Kubernetes’in kullandığı standart 5 alanlı bir ifadeyse (varsayılan olarak UTC). Buradaki önizlemenin sunucu saatini (UTC) kullandığını unutmayın: küme farklı bir saat diliminde çalışıyorsa zamanlar farklı olabilir.

Linux cron adlandırılmış kısayolları kabul eder: @reboot (başlangıçta), @yearly / @annually (0 0 1 1 *), @monthly, @weekly, @daily, @hourly. Bu ayrıştırıcı bunları kabul etmez; bu yüzden kısayolu eşdeğer 5 alanlı ifadeye genişletip öyle yapıştırın.

İlgili Araçlar

Araç diğer dillerde mevcuttur