Cron, projelerde ve işletim sistemlerinde kullanılan görevlerin (task ya da job) zamanlaması için kullanılan bir standarttır.
Gerek kişisel bilgisayarlarımızda gerekse geliştirdiğimiz yazılımlarda (Windows uygulamaları için) Windows’un “Görev Zamanlayıcı”sını ya da kendi oluşturacağımız bir görev zamanlayıcı yazılımı kullanıyoruz. Örneğin Microsoft, Office yazılımlarının güncelliğini kontrol edebilmek için bilgisayara “Office Automatic Updates” isminde bir görev ekliyor. Bu görev her hafta “Pazar, Salı ve Cuma” günleri çalışacak şekilde ayarlanıyor. Bu günlerde yapılan güncelleme kontrollerinden sonra bilgisayarın sağ alt tarafında çıkan “Office uygulamanızı güncellemek ister misiniz” benzeri bir yazıyla karşılaşırsınız.
Ya da geliştirdiğiniz yazılımda her gün (ya da gün içinde belirli aralıklarla) çalışması gereken görevleriniz olabilir. Örneğin birden fazla modülü olan bir projeniz var ve tüm modüller üzerinden kullanıcılara e-posta gönderimi yapmanız gerekiyor. Bunu her modülde eş zamanlı (butona tıkladığında göndersin) olarak yapmak yerine, gönderilecek tüm e-postaları “Mesaj” isimli bir tabloda (havuzda) toplayıp belli periyodlarla (Saat başı ya da 2 saatte bir) havuzdaki tüm e-postaları arkaplanda göndermek daha sağlıklı olacaktır. Bazı modüller tek e-posta gönderirken bazı modüller bir anda binlerce e-posta göndermeye çalışabilir. Sunucuda oluşabilecek problemler, e-posta alıcı sayısındaki fazlalık vb durumlar göz önünde bulundurulduğunda, bu işlemin arkaplanda (sunucu üzerinde) bir görev (task) tarafından yapılması daha sağlıklı olacaktır.
Bu ve bunun gibi zamanlanan işlemler, başta bahsettiğim gibi işletim sistemlerinin üzerinde bulunan görev zamanlayıcı uygulamalarıyla yapılabileceği gibi, kendi oluşturacağımız yazılımlarla da kullanabiliriz.
Cron ile zamanlanmış görev oluşturmak için iki parametreye ihtiyaç vardır. İlki, görevin hangi zaman aralıklarında çalışacağı; ikincisi ise görev çalıştığında hangi işlemlerin yapılacağıdır. Zaman tanımlaması için Cron’a özgü bir yazım formatı vardır. Bu formatta 5 tane parametre tanımlanmaktadır.
* * * * * zaman tanımı
│ │ │ │ │
│ │ │ │ Haftanın kaçıncı günü
│ │ │ │
│ │ │ Hangi ay
│ │ │
│ │ Ayın kaçıncı günü
│ │
│ Saat kaçta Saat
│
Saatin kaçıncı dakikasında
* ile tanımlanan yerlere, belirtilen parametreler tanımlanır. Parametrelerin alacağı değerler sağdan sola doğru sırasıyla aşağıda listelenmiştir.
Haftanın kaçıncı günü: Görevin haftanın hangi günlerinde çalışacağının tanımlandığı parametredir. 0 ile 6 arasında değerler alır. 0: Pazar, 1: Pazartesi, 2: Salı, 3: Çarşamba, 4: Perşembe, 5: Cuma, 6: Cumartesi, *: Her gün anlamına gelmektedir. * tanımlaması yapılırsa haftanın her günü çalışacak anlamına gelir.
Hangi ay: Görevin hangi aylarda çalışacağının tanımlandığı parametredir. 1 ile 12 arasında (1: Ocak … 12: Aralık) değerler alır. Her ay çalışacak ise * değerini alır.
Hangi gün: Görevin, ayın kaçıncı günlerinde çalışacağının tanımlandığı parametredir. 1 ile 31 (aya göre 28 veya 30 da olabilir) arasında değerler alır. Her gün çalışacak ise * değerini alır.
Saat kaçta: Görevin, günün kaçıncı saatinde çalışacağının tanımlandığı parametredir. 0 ile 23 arasında değerler alır. Saatbaşı çalışacak ise * değerini alır.
Saatin kaçıncı dakikasında: Görevin, saatin kaçıncı dakikasında çalışacağının tanımlandığı parametredir. 0 ile 59 arasında değerler alır. Her dakika çalışacak ise * değerini alır.
NOT: Eğer bir parametreye birden fazla tanımlama yapmanız gerekirse, değerlerin arasına virgül (,) koyarak tanımlama yapabilirsiniz.
Cron zamanlaması ilgili aşağıda birkaç örnek yazım bulunmaktadır.
Örnek Uygulamalar
Her ayın 5’inde saat 00:00’da çalışacak görev zamanlama
0 0 5 * *
Her Salı günü saat 14:00’da ve 16:00’da çalışacak görev zamanlama
0 14 * * 3
Yarım saatte bir çalışacak görev zamanlama
30 * * * *
Her gün 12:30, 13:00, 22:30 ve 23:00’da çalışacak görev zamanlama
0,30 12,13,22,23 * * *
Her Cumartesi ve Pazar günleri 20:00’da çalışacak görev zamanlama
0 20 * * 5,6
Hafta içi (Pazartesi’den Cuma’ya) saat başı çalışacak görev zamanlama
0 * * * 1-5
Cron’un tanımını ne Cron ile görev oluştururken zaman tanımlamasını nasıl tanımlayacağımızı öğrendik. Bir sonraki makalede, Cron zamanlamasını kullanarak tanımlayacağımız görevleri C# Windows Service ile nasıl çalıştırabiliriz, öğrenelim.
Veysel Uğur KIZMAZ
Bilgisayar Mühendisi
veysel@ugurkizmaz.com
www.ugurkizmaz.com