29 Aralık 2010 Çarşamba

Crontab

Crontab Nedir?


Cron, istenilen işlerin belirli aralıklarla sistem arkaplanında çalışmasını sağlayan bir yardımcı yazılımdır. Crontab (CRON TABle - CRON TABlosu) çalıştırılacak cron elemanlarını ve ne zaman çalıştırılacaklarını tutan bir dosyadır.


Nasıl Çalışır?


Bir cron iş takvimi (schedule) basit bir ASCII metin dosyasıdır. Her kullanıcı kendi cron iş takvimine sahiptir. Bu genellikle Linux makinelerde /var/spool/cron/crontabs içinde bulunur. Crontab dosyaları direk olarak değiştirilemez ya da yaratılamaz. crontab komutunu kullanmadan dosyaya erişemezsiniz. 


$ crontab -e 


komutuyla crontab dosyasını düzenleyebilir ya da eğer yoksa yeni bir dosya oluşturabilirsiniz. Dosya sistemdeki varsayılan metin editörüyle açılacaktır. export EDITOR=vi ile vi'yi varsayılan editör yapabilirsiniz (ya da vi yerine istediğiniz editörü yazabilirsiniz). 

Bütün cron işleri en az 6 bölümden oluşur. Her bölüm tek boşlukla ayrılır. Son bölüm kendi içinde boşluklar barındırabilir. İlk 5 bölümde kendi aralarında kullanılması haricinde boşluğa izin verilmez. Bu ilk 5 Bölüm bir işin ne zaman ve hangi aralıklarla çalışacağını belirler. 



Bir işin genel yapısı şu şekildedir:


*   *   *   *   *       çalıştırılacak komut
-    -   -    -   -
|    |   |    |   |
|    |   |    |   +---- day of week - haftanın günü (0-7) (pazar için 0, isim kullanılabilir(ingilizce))
|    |   |    +-------- month - ay (1-12) (veya ay isimleri)
|    |   +------------- day of month - ayın günü (1-31)
|    +----------------- hour - saat (0-23)
+---------------------- minute - dakika (0-59)


Yıldız (*) o zaman birimindeki tüm geçerli değerlerin kullanılacağı anlamına gelir (her saat, haftanın her günü gibi). 


Bir zaman biriminde birden fazla değer kullanmak için değerleri virgülle (,) ayırmak gerekir. Eğer bir aralık girmek istiyorsanız başlangıç ve bitir tire (-) ile ayrılır. Örneğin, eğer komutunuzun pazartesiden cumaya her saat için :05 ve :35 geçe çalışmasını istiyorsanız girdiniz şu şekilde olmalıdır:


5,35 * * * 1-5 


Altıncı bölüm verilen zaman(lar)da çalıştırılacak komutu içerir. Örneğin, "temp" dizininizi her sabah 4:45'te temizlemek için:

45 4 * * * rm /home/{kullanıcı-ismi}/temp/*


Dosya kaydedildiği zaman çalışmaya başlar. Başlatmak için herhangi bir şey yapmanıza ya da bir program çalıştırmanıza gerek yoktur. Crontab dosyada bir komut olduğunda zamanı geldiğinde çalıştıracaktır. Bir girdinin/komutun çalışmasını istemediğinizde silmeniz ya da yorum satırı haline getirmeniz yeterlidir (başına # koyarak).


Crontab ile kullanılabilecek parametreler:

crontab -e    crobtab dosyasını düzenler, yoksa yeni bir tane yaratır
crontab -l     crontab dosyasını listeler
crontab -r     crontab dosyasını siler


Daha fazla bilgi ve örnek için man dosyasına bakabilirsiniz.


Öntanımlı olarak cron iş çalıştırıldıktan sonra kullanıcıya email gönderir. Bu özelliği kapatmak için her girdinin/işin sonuna 


> /dev/null 2>&1

eklenebilir.


Olayları bir log dosyasında toplamak içinse:


45  4 * * * rm /home/{kullanıcı-ismi}/temp/* > /home/{kullanıcı-ismi}/cronlogs/log.txt >/dev/null 2>&1

Log dosyasına yönlendirirken > kullanmak varolanı değiştirmek, >> kullanmak yeni girdiyi dosyanın sonuna eklemek anlamına gelir.




# komutları çalıştırmak için /bin/sh kullanılsın,
# /etc/passwd'de belirtilen önemsizdir
SHELL=/bin/sh
# kimin crontab’ı olduğunu boşver, bütün çıktıları ‘paul’e postala
MAILTO=paul
#
# hergün gece yarısından sonra beş dakika çalıştır
5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# her ayın ilk günü saat 14:15 de çalıştır -- çıktılar paul’e postalansın
15 14 1 * *     $HOME/bin/monthly
# hafta içi (Pazartesi-Cuma) hergün saat 22:00’da çalıştır ve Joe’yu kızdır
0 22 * * 1-5   mail -s "Saat 22:00" joe%Joe,%%Çocukların nerede?%
23 0-23/2 * * * echo "her gün 00:23, 02:23, 04:23 de çalışır"
5 4 * * sun     echo "her Pazar 4:05’de çalışır"


Bkn: [1]http://www.linuxweblog.com/crotab-tutorial
[2]http://adminschoice.com/crontab-quick-reference 
[3]http://www.belgeler.org/man/man5/man5-crontab.html


1 yorum:

  1. düzensiz periyoda sahip bir crontab ifadesinin dengesiz tetiklenmesi, linux dünyası için ne zaman bir sorun olarak algılanacak, bilginiz var mı?

    soruyu açmak gerekirse;
    12/* * * * * gibi bir ifade düzenli periyoda sahip çünkü 1 dakika 12 şer sn.lik dilimlere bölünebilir. ama, 25/* * * * * gibi bir ifade eşit periyodlarda tetiklenmiyor. 60/25=2.4 yapıyor, bu da bu ifadenin 1 dakika içinde 3 kez çalıştırılacağını gösteriyor 0 da 25 de ve 50 de. 4. tetiklenme ile 3. tetiklenme arasında sadece 10 sn oluyor oysa biz 25 sn de bir olsun istemiştik. biraz karışık oldu kusura bakmayın.

    YanıtlaSil