Crontab nedir, ne işe yarar ?

Bazı durumlarda, bilgisayarımızın belli bir işi, bizim önceden belirlediğimiz bir tarih ve saatte ya da belli bir periyotta yapmasını isteyebiliriz. Bunun için Linux bize, istediğimiz görevi zamanlama şansı veriyor. Bu işi, 'crontab' denilen bir programcıkla yaparız. Crontab programcığı, crontab komutu ve gerekli parametreleri ile kullanılır. Bu yazıda size, sadece en çok kullandığımız 3 parametresinden sözedeceğim.

crontab -e :

-e parametresi 'düzenle' (edit) anlamına gelir. Zamanlanmış görevlerin tutulduğu dosyayı vi metin düzenleyicisiyle açar ve dosyada değişiklik yapmanıza izin verir. Bu dosyanın yapısını birazdan anlatacağım.

crontab -l :

-l parametresi 'listele' (list) anlamına gelir. Size ait zamanlanmış görevleri listeler. Eğer size ait zamanlanmış görev yoksa, çıktısı şu şekilde olur:

[alaettin@zubaroglu e-bergi.com]$ crontab -l
no crontab for alaettin
[alaettin@zubaroglu e-bergi.com]$

Size ait zamanlanmış bir görev olmadığını bu şekilde bildirir.

crontab -r :

-r parametresi 'kaldır' (remove) anlamına gelir. Size ait bütün zamanlanmış görevleri siler. Biz zamanlanmış görevi silmek için -r parametresi yerine -e parametresiyle dosyayı açıp ilgili satırı silebileceğimizi unutmayalım.

crontab dosyasının yapısı :

"crontab -e" komutunu ilk denediğinizde ya boş bir dosya ile ya da ubuntu gibi debian tabanlı bir işletim sistemi kullanıyorsanız

# m h  dom mon dow   command

satırıyla karşılaşacaksınız. Diyez (#) işaretiyle başlayan bu satır program tarafından yorum olarak algılanır ve dosyanın yapısı hakkında bilgi vermek için konulmuştur. Satır 5 sayıdan ve bir komuttan oluşmaktadır. Satırın başında bulunan bu sayılar, satırın sonunda bulunan komutun ne zaman ya da hangi sıklıkla çalıştırılacağını anlatır. Bu sayıların anlamları şu şekildedir :

.---------------- dakika (0 - 59) 
 |  .------------- saat (0 - 23)
 |  |  .---------- ayın günü (1 - 31)
 |  |  |  .------- ay (1 - 12) YA DA [jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec]
 |  |  |  |  .---- haftanın günü (0 - 6) (Pazar=0)  YA DA [sun,mon,tue,wed,thu,fri,sat]
 |  |  |  |  |
 *  *  *  *  *  çalıştırılacak_komut

Sayı yerine yıldız (*) yazarak, programın, o kısımda olabilecek her değerde çalışmasını istediğimizi belirtebiliriz. Mesela 15 14 3 * * program şeklinde zamanlanmış bir görev, her ayın üçünde, haftanın hangi günü olursa olsun, saat 14.15'te çalışır. Bunun yerine 0,15,30,45 * * * 0 program şeklinde zamanlanmış bir görev ise, hangi ay ve ayın kaçı olursa olsun, her pazar ve sadece pazar günleri 15 dakikada bir çalışır.

Bir ayın ilk on gününü ifade etmek için, 'ayın günü' bölümüne "1,2,3,4,5,6,7,8,9,10" yazabileceğimiz gibi, aynı günleri "1-10" ile de ifade edebiliriz.

Ayrıca "1-9/2" ifadesini "1,3,5,7,9" yerine kullanabiliriz. Bu ifade, "1'den başla, en çok 9'a kadar git, her adımda 2 ilerle" anlamına gelir.

Birkaç özel ifade :

Senede bir : 0 0 1 1 *

Ayda bir : 0 0 1 * *

Haftada bir : 0 0 * * 0

Günde bir : 0 0 * * *

İki günde bir : 0 0 */2 * *

Saatte bir : 0 * * * *

Bir kullanıcının crontab kullanmasını yasaklamak için, /etc/crontab.deny dosyasına kişinin kullanıcı adını yazmanız yeterli olacaktır. Bu işlemi gerçekleştirebilmek için yönetici (root) olmanız gerektiğini lütfen unutmayınız. /etc/crontab.deny dosyası öntanımlı olarak boş gelir.

Bir kullanıcının crontab kullanmasına izin vermek içinse, kişinin kullanıcı adını /etc/crontab.allow dosyasına yazmanız gerekir. Ancak bilgisayarlarda öntanımlı olarak bu dosya bulunmaz ve bu durum, /etc/crontab.deny dosyasında kullanıcı acı geçmeyen herkesin crontab kullanabileceği anlamına gelir.

Kaynaklar :