İçerik Menüsü

22.Doküman

Zamanlanmış Görevler

Konu Etiketleri

zamanlanmış görevler , cron , crontab

Zamanlanmış Görevler

Sistemde yapılması gereken rutin işlerin zamanı geldiğinde otomatik olarak yapılması işine zamanlanmış görevler deniyor. Bu rutin işlere örnek söylemek gerekirse; benim her pazartesi sistemi yedeklemem gerekiyor diyelim, bunu her pazartesi elle yapmak yerine bu işi zamanlanmış görevlere ekleyerek otomatiğe bağlayabilirim. İşte zamanlanmış görevler bu ve bunun gibi durumlarda sıkça kullanılıyor.

cron

Rutin tekrarları sağlayan zamanlanmış görevleri yerine getirmemizi sağlayan servisimizin adı cron'dur.

Anlatıma cron servisinin çalışma durumunu kontrol ederek başlayalım. Bunun için konsola service cron status komutunu verelim.

Cron servisimizin çalıştığını teyit etmiş olduk. Cron servisinin yapılandırma dosyası /etc/crontab konumunda yer alıyor göz atmak için konsola cat /etc/crontab komutunu verebiliriz.

Şimdi de düzenleme yapmak adına konsola crontab -e komutunu verelim. Burada yer alan -e parametresi "edit" kelimesini yani "düzenleme" ifadesini temsil ediyor.

Konsol bize düzenleme yaparken hangi aracı kullanmak istediğimizi soruyor. Ben nano aracını seçiyorum yani konsola 2 rakamını giriyorum.

Çıktıda bize bir örnek kullanım gösterilmiş biz bu kullanımı ele alarak servisin kullanım şeklini görelim.

Yukarıdaki şema yeterince açıklayıcı olmadıysa endişelenmenize gerek yok. Örnekler üzerinden yapacağımız anlatım ile cron servisimizin kullanımını rahat şekilde anlamış olacağınıza inanıyorum.

Zamanlanmış görevleri yerine getiren servis cron ve bu servisin yerine getirdiği işlere de cron job deniliyor. Bu tanımın çok da önemi yok ancak bunu böyle bilseniz daha iyi olur. Bizler de kendi zamanlanmış görevlerimizi (cron jobs) atamak istersek crontab -e komutu ile açtığımız dosyanın son satırına yapmak istediğimiz işi ve tam tarih düzenini girmemiz gerekiyor. Bu görevleri nasıl oluşturacağımızı konunun devamında örnekler üzerinden öğreniyor olacağız.

Örnekler

Kullanımın anlaşılması amacıyla örnekleri olabildiğince basit tuttum.

Sizlere vereceğim örnekler ne kadar gereksiz gelse de örneği konuyu anlamak adına kullandığımızı unutmayın ve asıl anlatılmak istenen noktaya odaklanın lütfen.

O anın tarihi detaylarını bir dosyaya kaydetmek istiyorum diyelim. Tarihi detayları zamanlar.txt isimli klasöre kaydetmek için * * * * * echo `date` ~/Desktop/zamanlar.txt komutunu kullanacağım.

Bütün yıl boyunca her dakikanın çıktılarını kaydetmesini istersem aşağıdaki şekilde bir kullanım işimizi görür.

Yıldız işareti (*) olan kısımlar hepsini kapsamaktadır yani haftanın bütün günleri, ayın bütün günleri ve saatin bütün dakikaları.. gibi.

Komutun düzenli hali * * * * * echo `date` ~/Desktop/zamanlar.txt şeklindedir.

Bir süre geçtikten sonra masaüstünde(Desktop dizininde) yer alan zamanlar.txt dosyasını cat zamanlar.txt komutu ile kontrol ediyorum.

Görev istediğimiz şekilde yani her dakikada yazılacak şekilde otomatik olarak gerçekleşmiş oldu.

Şimdi spesifik bir zaman belirleyerek görevin yerine getirilme durumunu ele alalım.

Her gün 10:25 da otomatik olarak test.txt isimli belgeye "test yazısı" yazdırmak için kalıbı crontab dosyasına aşağıdaki şekilde yazmalıyız.(Ayrıca başta hangi ifadenin neyin karşılığı olduğunu belirttiğim için tekrar tekrar üzerlerine yazmıyorum. Eğer şaşırırsanız yukarıdaki kısımları tekrar gözden geçirebilirsiniz.)

25 10 * * * echo "test yazısı" ~/Desktop/test.txt

ls -l komutu ile de dosyamızın üretildiği tarihi sorguladık ve çıktıdan da anladığımız üzere verdiğimiz görev zamanında yerine getirilmiş.

Eğer belirli bir saat-tarih arasında belirli kere tekrar eden görev atamak istersek kullanım şekilleri aşağıdaki örneklerdeki gibi olacaktır.

Belirli aralıklar ile olacaksa aralıkları -(kısa çizgi) işareti ile ayırarak belirtmemiz gerekiyor. Yani örneğin;

Her saatin ilk 5 ile 20 dakikası arasında komutum çalışsın istersem:

5-20 * * * * komut

Her gün saat 3 ile 5 arasında her dakika komutum çalışsın istersem:

* 3-5 * * * komut

Her ayın 5 ile 15. günleri arasında saat 16 ile 22 arasındaki her saatin ilk 20 dakikası komutum çalışsın istersem.

0-20 16-22 5-15 * * komut

Haziran ayında ilk 20 gününün her cuma günü saat 12 ile 15 arasındaki 35 ile 55 dakikaları arasında komutum çalışsın istersem:

35-55 12-15 1-20 6 5 komut

Belirli gün ve tarihlerde olacaksa o tarihleri ,(virgül) işareti ile ayırarak tek tek belirtmemiz gerekiyor. Yani örneğin;

Her saatin 5 10 15 ve 20. dakikalarında komutum çalışsın istersem:

5,10,15,20 * * * * komut

Her gün saat 3 5 ve 7 de komutum çalışsın istesem:

0 3,5,7 * * * komut

Her ayın 20 22 24 ve 26. günleri 2 4 6 ve 8 saatlerinin 5. ve 10. dakikalarında komutum çalışsın istersem:

5,10 2,4,6,8 20,22,24,26 * * komut

Belirli süre içinde belirli kez çalışmasını istersek /(taksim) işareti ile kaç kez olacağını belirtebiliyoruz. Yani örneğin;

5 dakikada bir çalışmasını istersem:

*/5 * * * * komut

10 saatte bir komutumun çalışmasını istersem:

* */10 * * * komut

Elbette örnekleri çoğaltmak mümkün ancak daha fazlası gereksiz olacaktır. Ayrıca atadığınız zamanlanmış görevlerin doğruluğunu kontrol etmek isterseniz bu adresten verdiğiniz zaman aralığının karşılığını görebilir ve hata yapmaktan kaçınabilirsiniz.

Yani bu konu sizlerin de biraz kurcaladıktan sonra anlayacağı kolay bir konudur.

Eğer belirlenen zamanlanmış görevleri listelemek istersek crontab -l komutunu kullanabiliriz. Buradaki -l parametresi "list" kelimesini yani "listeleme" işlevini temsil ediyor.

Şayet oluşturduğumuz tüm zamanlanmış görevleri silmek istersek crontab -r komutunu kullanmalıyız. Buradaki -r parametresi "remove" kelimesini yani "silme" işlevini temsil ediyor.

Alıştırmalar Hakkında

Öğrendiğiniz bilgilerin kalıcı olması için mutlaka bolca alıştırma yapmalısınız.Burada belirtilen alıştırmalar dışında da kendi kendinize özellikle de zorlandığınız konularda bol bol alıştırmalar yapın. Aksi halde öğrendiğiniz bilgiler kısa sürede unutulup gidecektir. Yani gerçekten öğrenmek istiyorsanız lütfen öğrendiğinizi hissede kadar alıştırmalar yapın.

Her gün 11:11'de çalışan bir görev atayın.

Her pazartesi 12:00'da çalışan bir görev atayın.

Her ayın 10'u ile 25'i arasında her gün saat 11 ile 22 arasındaki her saatin ilk 10 dakikası çalışan bir görev atayın.

Her saatin 1 3 5 ve 7 dakikalarında çalışan bir görev atayın.

Her gün tam olarak saat 2 5 ve 9 da çalışan bir görev atayın.

Her ayın 10 12 14 ve 26. günleri 2 3 6 ve 22 saatlerinin 3. ve 15. dakikalarında çalışan bir görev atayın.

Mart ayının ilk 18 gününün her pazar günü saat 14 ile 19 arasındaki 15 ile 35 dakikaları arasında çalışan bir görev atayın.

2 saate bir çalışan bir görev atayın.

8 dakikada bir çalışan bir görev atayın.

İlgili komut yardımıyla atadığınız görevleri listeleyin.

İlgili komut yardımıyla tüm zamanlanmış görevleri silin.

Geri Bildirimde Bulunun

Sizlere daha verimli bir kaynak sunabilmemiz için, uygulamada veya dokümantasyonlarda yer alan tüm hata ve eksiklerimizi bize bildirebilirsiniz.