Pardus’ta Görev Zamanlama (Cron-Crontab)

4826_cron-1Hiç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.

4826_1

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

Yazar: Ömer Çakmak