Hiçbir kullanıcı, tüm vaktini bilgisayar
başında geçirmek istemez. Bazı işlemlerin zamanı geldiğinde başlamasını
bekler. Örneğin güncellemelerin zamanlanması ve zamanı gelince
çalışması, kullanıcılar tarafından istenilir. İşletim
sistemlerinde yapılan işlemler, süreçler halinde yönetilir. Bazı
süreçler bir sürecin tetiklemesiyle çalışırlar. İşletim sistemleri de bu
yüzden, birtakım işlemleri zamanlar ve zamanı gelince çalıştırırlar.
Yani kısacası, hem kullanıcılar hemde işletim sistemleri zamanlanmış
görevlere ihtiyaç duyarlar.
Unix işletim sistemlerinde, zamanlanmış görev oluşturma aracı
cron’dur. Zamanlanan görevler bir crontab dosyasına yazılır. Kullanıcı
zamanlanmış görev oluşturabilmesi için crontab dosyasına cron görevi
tanımlamalıdır. İsterseniz öncelikle bir cron görevinin yazılımını
görelim.
Bir cron göre altı(6) adet değişkenden oluşur. Varsayılan değerler ” * “ karakteri ile temsil edilir.
* * * * * *
1 2 3 4 5 6
1. (*) Dakika : Girilebilecek değer aralığı ve türü 0-59 arasıdır.
2. (*) Saat : Değer aralığı 0-23′dür.
3. (*) Gün : Sayısal olarak 1-31 girilmelidir.
4. (*) Ay : 1-12 (Ocak=1… Aralık=12 gibi)
5. (*) İşgünü : 0-6 arası rakamlar girilmelidir. (Pazar=0…Cumartesi=6 gibi)
6. (*) İşlem : Komut veya komutlar.
Öncelikle; bilgisayarımızda daha önce tanımlanmış bir crontab dosyası var mı yok mu kontrolu için komut satırına;
$ crontab -l
yazalım. Eğer ekrana ” no crontab for kullanici_adi ” şeklinde bir çıktı
veriyorsa daha önce bir tanımlama yoktur. Tanımlı bir crontab dosyası
varsa içeriği ekranda görüntülenir. Olmadığını varsayarak bir crontab
dosyası oluşturalım. Crontab dosyası oluşturmak için komut satırına;
$ crontab -e
yazdılmalıdır. Açılan ekranda # işareti ile başlayan satırlar bulunur.
Bunlar açıklama satırlarıdır. Bizde oluşturduğumuz görevlerin üzerine #
işareti içeren satırlar ekleyerek tanımladığımız görev hakkında açıklama
yazabiliriz. Bu şekilde bizden sonra bu alana giren kullanıcılar
yazılanları dikkate alarak ve ne yapılmak istendiğini bilerek hareket
ederler.
Örnek olarak crontab dosyasına;
# Disk durumunu gösteren bir dosya oluşturma
55 16 10 7 3 df -m >> /home/pardus/diskdurum.txt
şeklinde bir satır yazıdğımızda temmuz(7) ayının 10′u Çarşamba(3) günü saat 16:55 de, “/home/pardus/” dizini altında “diskdurum.txt” adında bir txt dosyası oluşturur. Ve içerisine disk durumu hakkında bilgi veren “df” komutu ile aldığı sonucu yazdırır.
Crontab dosyasında verilebilecek altı değişkene ait bazı parametreler vardır. Bunlar;
” * ” yıldız işareti
” , ” virgül işareti
” – ” orta çizgi işareti’dir.
” * ” ile gösterilen alanların aldığı değerler farklı olduğu gibi bu
kısma değişken tanımlanmadığında yapılacak görevlerde farklılaşır.
Birinci alana sayısal bir değişken tanımlanmadığında her dakika işlem
devam eder. Örneği belirlenen zaman aralığında sistem loglarını her
dakika bir dosyaya kopyalamasını istediğinizde bu alana ” * ”
değişkenini atayabilirsiniz.
İkinci alan dakika da olduğu gibi, değişken tanımlanmadığında her saat çalışır.
Üçüncü alan ” * ” değişkenini aldığında belirlenen aralıkta her gün işlem tekrar edilir.
Dördüncü alan ” * ” değişkenini aldığında her ay görev tekrar edilir.
Beşinci alan ” * ” değişkenini aldığında belirlenen görev haftanın her günü çalışır.
Altıncı alanın ” * ” alan boş olamaz. Bir görev tanımı yapılmalıdır.
” , ” parametresi kullanıldığında değişkenlerin alabileceği değerleri örneklendirelim;
Yapılacak işlemin belirli dakikalarda tekrarı isteniyorsa bu alana ” , ”
parametresi kullanılarak değer ataması yapılır. Örneğin;
0,10,20,30,40,50 16 10 7 3 df -m >> /home/pardus/diskdurum.txt
şeklinde bir görev tanınmlandığında görev 10′ar dakika ara ile çalıştırılır. Aynı şekilde saat alanına;
* 7,12,19,23 10 7 3 df -m >> /home/pardus/diskdurum.txt
yazarak saat 7′den itibaren gün içerisinde 5′er saat ile görev çalıştırılır. Gün alanına;
* * 1,15,30 7 3 df -m >> /home/pardus/diskdurum.txt
yazıldığında ayın 1,15 ve 30. günleri ,ay alanına;
* * * 1,6,12 3 df -m >> /home/pardus/diskdurum.txt
yazıldığında yılın 1(Ocak), 6(Haziran) ve 12(Aralık) ayları, iş günü alanına;
* * * * 0,3 df -m >> /home/pardus/diskdurum.txt
yazarak hatfanın Pazar ve Çarşamba günlerinde tanımlanan görevin yerine getirilmesi istenebilir.
Altıncı alana ” ,” parametresi ile birden fazla görev yüklenebilir. Örneğin;
* 7,12,19 * * * ps -ax >> /home/pardus/calisan_surecler.txt, df -m >> /home/pardus/diskdurum.txt
yazarak hem disk durumundan hemde işletim sisteminde çalışan süreçlerin bilgisi alınabilir.
Üçüncü parametre olan ” – ” orta çizgi ile değerlere belirli bir aralık atanabilir. Örneğin dakika alanına;
45-60 16 10 7 3 df -m >> /home/pardus/diskdurum.txt
şeklinde bir görev tanınmlandığında görev 45 ile 60. dakika arasında her dakika çalıştırılır. Aynı şekilde saat alanına;
* 9-18 10 7 3 df -m >> /home/pardus/diskdurum.txt
yazıldığında sabah 09:00 ile akşam 18:00 saatleri arası çalıştırılır. Gün alanına;
* * 10-15 7 3 df -m >> /home/pardus/diskdurum.txt
yazıldığında ayın 10 ile 15. günleri arası daima çalışır. Ay alanına;
* * * 1-7 3 df -m >> /home/pardus/diskdurum.txt
yazıldığında yılın ocak ayı ile Temmuz ayları arası iş günü alanına;
* * * * 1-5 df -m >> /home/pardus/diskdurum.txt
yazarak hafta içi yani Pazartesi ve Cuma günleri arası görev daima
çalışır. Son değer olan işlem alanında bu parametre kullanılmaz.
Her kullanıcının oluşturduğu cron grörevleri “/var/spool/cron/” dizini
altındaki crontab klasöründe kullanıcı adı ile barındırırlır. Görsel
olarak da bu dosyalara erişerek değişiklik yapılabilir.
Küçük bir örnek fakat BÜYÜK bir görev !
Aslında crontab’ın en çok kullanım alanlarından biri yedekleme
işlemleridir. Dosya veya dizinleri belirtilen zaman da belirlenen yere
yedekleme yaptırılabilir. Örneğin;
00 16 1 * 1 cp -R /home/pardus/Resimler /home/pardus/yedek
şeklinde yazdığınızda her ayın 1′inde saat 16:00 da resimler klasörünüzü
yedek klasörüne tüm alt klasörleri ile beraber kopyalar. Bu ve bunun
gibi cron görevleri kullanıcıların ihtiyaçlarına karşılayacak küçük
görevlerdir.
Kaynakça:
http://en.wikipedia.org/wiki/Cron