Periyodik Zamanlayıcı Ayarlamak: Cron Expressions

Hayatımızda rutin olarak yaptığımız işler vardır. Bu rutinler her gün saat 18:30’da akşam yemeği yemek, her sabah 06:30’da yürüyüşe çıkmak gibi aktiviteler olabilir. İnsan hayatında olduğu gibi dijital dünyada da bazı işlemlerin rutin olarak gerçekleşmesi gerekmektedir. Bunlar veritabanındaki job işlemleri, servis uygulamaları ya da kendi çalıştığım alan olan RPA süreçleri olabilir. Bahsi geçen zamanlamaya dayalı tetiklenen sistemler için geliştirilmiş bir notasyon bulunuyor: Cron Expressions. Bu kavramın doğrudan bir Türkçe karşılığı bulunmamakla birlikte Kronik İfadeler olarak çevrilebilir.

RPA geliştiriciler olarak bizler de yazdığımız sürecin canlı ortama alınması sırasında cron expressions ile sıkça karşılaşırız. Süreçlerin büyük bölümü periyodik çalışması planlanan işlemler olduğu için canlıya alırken müşterimizin talep ettiği şekilde zamanlayıcımızı ayarlamalıyız. UiPath Orchestrator üzerinde bu işlemi kolaylaştırmak için bir arayüz bulunuyor. Aşağıda görebileceğiniz bu arayüz ile basit cron expression’lar üretmeniz mümkün.

Orchestrator – Tetikleyici Oluşturma Arayüzü

Ancak bazen müşterinin zamanlayıcı talebi karmaşık olabilir. Örneğin Her 2 ayda 1 ayın son cuması saat 12:00’da çalışması istenen bir süreciniz varsa Cron Expression ifadenizi kendiniz oluşturmalısınız. Sonrasında oluşturduğunuz bu ifadeyi UiPath Orhestrator üzerinde Advanced kısmına yazmalısınız. Ama hiç korkmaya gerek yok. Aşağıda verdiğim websitesi üzerinden istediğiniz cron ifadeleri oluşturabilirsiniz.

Ben de bu siteden sıkça yararlanıyorum. Çünkü kendi başına cron expressions üretmek pek de kolay bir işlem değil. Bazen de yazdığım cron ifadenin doğruluğunu buradan kontrol ediyorum. Bu yazıyı yazma niyetimse hem biraz cron expression’lardaki ifadeleri detaylı biçinde öğrenmek hem de yeni başlayanlar için yardımcı bir kaynak olmasını istemem.

Cron Expression Oluşturulması

Bu ifadeleri oluştururken uymamız gerek çok basit kurallar vardır. Aşağıda koyu olarak yazılan ifade geçerli bir cron expression yazmak için uymamız gerek sıralamayı göstermektedir. Saniye, dakika, saat gibi birimlere ait ifadelerimizi aşağıdaki sırayla yan yana yazarız ve aralarında 1 karakter boşluk bırakırız.

[saniye] [dakika] [saat] [ayın günü] [ay] [haftanın günü] [yıl]

Bahsettiğimiz alanlarla ilgili cron ifade içerisinden yer almasının zorunluluğu, alabileceği değer aralığı ve kendi içerisinde yer alabilecek özel karakterleri gösteren tablo aşağıda yer almaktadır.

AlanZorunlulukDeğer Aralığıİzin Verilen Özel Karakterler
saniyeEvet0 – 59, - * /
dakikaEvet0 – 59, - * /
saatEvet0 – 23, - * /
ayın günüEvet1 – 31, - * / ? L W
ayEvet1 – 12 ya da JAN – DEC, - * /
haftanın günüEvet1 – 7 ya da SUN – SAT, - * / ? L #
yılHayırboşluk ya da 1970 – 2099, - * /

Özel Karakterlerin Anlamları

Wildcard: Özel karakterlerdir. Seçici ifadeler olan selector’lerde olduğu gibi Cron Expression’larda da kullanılır. Cron Expression’larda asterisk(*), virgül(,), soru işareti(?), tire(-), slash(/) gibi özel karakterler kullanılmaktadır. Örnek olarak saat alanına * yazılırsa, her saat tetikleme istendiğini belirtir.

Aşağıdaki tabloda cron expression’larda kullanılan özel karakterlerin tümü için açıklamaları ve kullanım örneklerini bulabilirsiniz.

Özel KarakterAçıklamaÖrnek
*Verilen alan için tüm değerleri belirtmek için kullanılır.* * ? * * ifadesi her saniye tetiklenirken 0 * * ? * * ise her dakika, yani her dakikanın 0. saniyesinde tetiklenir.
?Değer belirtilmediğini belirtmek için kullanılır. Yalnızca ayın günü veya haftanın günü alanlarında kullanılabilir.0 0 0 15 * ? * her ayın 15. gününde gece yarısı tetiklenirken, 0 0 0 ? * 2 * her Pazartesi gece yarısı tetiklenir.
-Bir dizi değeri belirtmek için kullanılır.0 0 9-17 ? * 2-6 Pazartesi’den Cuma’ya kadar 09:00 ile 17:00 arasında her saat başı tetiklenir.
,Ek değerleri belirtmek için kullanılır.0 0 9-17 ? * MON,WED,FRI Pazartesi, Çarşamba ve Cuma günleri 09:00 – 17:00 arasında her saat tetiklenir.
/Verilen alan ya da alanların artışlarını belirtmek için kullanılır.0 0 0/3 ? * 2/7 gece yarısından başlayarak Pazartesi günleri her üç saatte bir tetiklenir.
LBir şeyin sonuncu değerini (Last) belirtmek için kullanılır. Yalnızca ayın günü veya haftanın günü alanlarında kullanılabilir. Haftanın günü için, başka bir değerden sonra kullanılabilir, örneğin ayın son Cuma gününü belirtmek için 6L ifadesi kullanılır.59 59 23 L * ? her ayın son günü saat 23:59:59’da tetiklenirken 59 59 23 ? * 6L  ifadesi de aynı anda tetiklenir, ancak yalnızca her ayın son Cuma günü.
WVerilen değere en yakın hafta içi günü belirtmek için kullanılır. Yalnızca ayın günü alanıyla kullanılabilir.0 0 0 15W * ? her ay 15’ine en yakın hafta içi günü gece yarısı 00:00’da tetiklenir. Ayın 15’i Cumartesi ise, 14’üncü Cuma günü tetiklenirken, 15’i Pazar ise 16’sı Pazartesi günü tetiklenir.
#Belirli bir değerin istenen aylık oluşumunu, örneğin ilk Cuma veya dördüncü Perşembe’yi belirtmek için kullanılır. Yalnızca haftanın günü alanıyla kullanılabilir.0 0 17 ? * 6#1 her ayın ilk Cuma günü saat 17: 00’de tetiklenir.

Yukarıda anlattığım bilgileri kullanarak kendi özel zamanlayıcılarını oluşturmanız mümkün. Umarım bu yazı sizin için yararlı olmuştur.

Sorularınız ve yorumlarınız için bu içeriğe yorum yazabilir ya da bana iletişim sayfasındaki linklerden ulaşabilirsiniz.

Başka bir yazıda görüşmek dileğiyle. Esen kalın.

Kaynakça

https://docs.uipath.com/orchestrator/docs/using-cron-expressions

https://fireship.io/snippets/crontab-crash-course/

https://www.baeldung.com/cron-expressions

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.