Crontab:Zamanlanmış Görevler Nedir?

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.


Çı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ı zamanlanmisgorev isimli klasöre kaydetmek için * * * * /bin/date >> /var/zamanlanmisgorev 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.

Bir süre geçtikten sonra var dizininde yer alan zamanlanmısgorev dosyasını cat zamanlanmısgorev 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 11:27 de 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.)

  
27 11 * * * echo "test yazısı" >> /var/test1.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 -lkomutunu 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.

Bir sonraki makale de görüşmek dileğiyle.

Linux içinde yayınlandı

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir