Yazılım ortamlarını kuran ve bakımını yapan kişiler belirli saatlerde, tarihlerde veya aralıklarla periyodik olarak çalışmak için işleri (komutlar veya kabuk komut dosyaları) zamanlamak için crontab kullanır. Genel amaçlı niteliği Internet’ten dosya indirmek ve düzenli aralıklarla e-posta indirmek gibi işler için kullanışlı olmasına rağmen, sistemin bakımını veya yönetimini otomatikleştirir. Crontab, tekrarlayan görevleri zamanlamak otomatize etmek için en uygun çözümdür. Bir kerelik görevlerin planlanması, genellikle yardımcı programını kullanarak daha kolaydır.

Crontab, belli bir programda periyodik olarak çalıştırılacak kabuk komutlarını belirten bir yapılandırma dosyası olan bir crontab (cron tablo) dosyası tarafından yönlendirilir. Crontab dosyaları, iş listelerinin ve diğer talimatların tutulduğu yerde saklanır. Kullanıcılar kendi bireysel crontab dosyalarına sahip olabilirler ve yalnızca sistem yöneticilerinin düzenleyebileceği bir sistem çapında crontab dosyası (genellikle /etc veya /home/kullaniciadi/etc alt dizini) bulunur.

Crontab ile aşağıdaki gibi işlemleri yapabiliriz:

  • Belirli saatler içerisinde bir URI üzerinden otomatik dosya indirme işlemi
  • Sistem üzerinde bulunan ve daha önceden belirlenen klasörlerin yedeklerini almak
  • Yedekleri alınan dosyaların bir başka uzak sunucuya kopyalanması (replike edilmesi)
  • Her gün belirli saatlerde sunucu üzerinden e-posta gönderimi yapmak gibi gördüğünüz gibi

Örneklerle Crontab

Crontab’ın bulunduğu dosya yolu çoğu zaman “/etc/crontab” şeklindedir ve $ crontab -e komutu ile otomatik olarak erişilebilir. Karşımıza gelecek olan ekranda basit bir text editörü olacaktır ve en alt satır ise bizim için ayrılmış durumdadır.

┌───────────── dakika (0 – 59)
│ ┌───────────── saat (0 – 23)
│ │ ┌───────────── takvim günü (1 – 31)
│ │ │ ┌───────────── ay (1 – 12)
│ │ │ │ ┌───────────── gün (0 – 6) (0=Pazar, 1=Pazartesi … 6=Cumartesi
│ │ │ │ │                                            ve ayrıca sadece Pazar günü için 7=Pazar)
│ │ │ │ │
│ │ │ │ │
*  *  *  * *  çalıştırılmak istenen komut

Yukarıdaki crontab evrenseldir ve crontab çalıştırmak için sisteminizin unix olması yeterlidir. Şöyle ki; ben her ayın ilk günü sabah saat 07:30’da /home/kullaniciadi dizinimin yedeğini /yedek/kullaniciadi klasörüme almak istiyorum. Bunun için yazmam gereken komut aşağıki gibi olmalıdır.

$ 30 07 1 1 * tar -zcvf /yedek/kullanici.tar.gz /home/kullanici.tar.gz

Crontab Yetkileri

Sistem üzerinde var olan bazı kullanıcıların crontab erişimlerini tamamen kısıtlayabilirsiniz ya da varsayılan olarak erişimi kısıtlanmış olan kullanıcıların ise crontab erişimine izin verebilirsiniz. Bu gibi durumlar için /etc dizini altında iki adet dosya oluşturmamız gerekme. Bu dosyalar ise;

  • cron.allow
  • cron.deny

Varsayılan olarak bu iki dosya da sistem üzerinde bulunmaz. Crontab erişimini kısıtlamak istediğiniz kullanıcıları favori text editörünüz ile açıp her bir satıra bir kullanıcı adı gelecek şekilde düzenleyip kaydetmeniz yeterli olacaktır.

Diğer bir senaryoda ise, bütün kullanıcıların crontab erişiminin olmadığını ve bazı kullanıcılara ise crontab erişimi vermek istediğinizi düşündüğümüzde yine favori text editörünüz ile bu sefer cron.allow dosyasını açıp her bir satıra bir kullanıcı adı gelecek şekilde düzenleyip kaydetmeniz yeterlidir.

Voila!