CHAPTER 3 ZAMANLANMIŞ GÖREVLER (Automated Tasks)
3.1 Zamanlanm ış Görevler Linux ta belirli aralıklarla yapılması gereken görevler, zamanı gelince otomatik olarak çalıştırılacak şekilde yapılandırılabilir. RedHat linux, sistem ile ilgili görevleri yönetebilmek için bazı komutları zamanı gelince otomatik olarak çalıştıracak şekilde hazırlanmıştır. Örneğin locate komutunun güncel sonuçlar üretebilmesi için slocate veritabanını günlük olarak güncellemektedir. Sistem yöneticileri zamanlanmış görevleri periyodik yedeklemeler, sistemi gözleme, çeşitli scriptleri çalıştırmak gibi işler için kullanırlar. Redhat Linux 3 adet zamanlanmış görev aracı ile gelir. at cron batch 3.2. Cron cron, belirli bir zamanda, ayın belirli gününde, haftanın belirli gününde veya haftada bir çeş itli görevleri çalıştırmak için tasarlanm ış bir Daemon dur. DİKKAT cron, sistemin daima açık olduğunu farzeder. Eğer bir görevin çalıştırılaca ğı zamanda sistem açık değilse, sistem açılınca zaman ı geçmi ş komut çalıştırılmaz. Cron ile zamanlanan görevler yeri gelince periyodik olarak çalıştırılır. Bir görev belirtilen zamanda sadece 1 defalığına çalıştırılsın isteniyorsa at veya batch komutlar ı kullanılmalıdır. Cron servisinin çalışabilmesi için olmadığın ı denetlemek için vixie-cron RPM paketi kurulmu ş olmalıdır. Bu paketin kurulu olup
rpm -q vixie-cron komutunu kullanabilirsiniz. cron RPM paketi kurulu ise bunun DAEMON porgram ı olan crond çalışıyor olmalıdır. Servisin durumunu kontrol etmek için service crond status komutu kullanılabilir. 3.3. Cron görevlerini ayarlama Aşağı da /etc/crontab dosyas ı görülmektedir. SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly İlk dört satır, zamanlanm ış görevlerin kullanaca ğı kabuk değişkenlerini tanımlamaktadır. SHELL değişkeni zamanlanm ış görevin hangi komut yorumlayıc ı ile çalıştırılacağın ı gösterir. PATH değişkeni ise zamanlanm ış görevdeki komutların hangi klasörlerde bulunduğunu gösterir. MAILTO değişkeni, cron görevlerinin çıktısının hangi kullanıcıya mail olarak gönderileceğini belirtir. MAILTO="" şeklinde yazılırsa hiçbir kullanıcıya mail gitmez. HOME değişkeni ise zamanlanm ış komutun ev dizini olarak nereyi algılamas ı gerektiği gösterilir. Bundan sonraki satırların tümünün başında yer alan sayısal ifadeler aşağıdaki tarih tanımlamaların ı belirtir. minute hour day month dayofweek command minute 0 ile 59 aras ı tamsayı hour 0 ile 23 aras ı tamsayı day 1 ile 31 aras tamsay (seçilen aya uygun olarak yaz lmal d r, örne in baz aylarda ı ı ı ı ı ğ ı 31 gün yoktur)
month 1 den 12 ye kadar tamsay ı dayofweek 0 dan 7 ye kadar tamsay ı (0 yada 7 Pazar gününü belirtir.) command çalıştırılacak olan komut Yukarıdaki her bir alan için (*) işareti o alanın alabileceği tüm değerleri simgeler. Örneğin ay için * konmuşsa bu tüm aylarda çalıştırılacak anlamına gelir. (#) işareti ile başlayan her satır kullanıcıların okumas ı içindir, çalıştırılmazlar. Redhat Linux Saatlik /etc/cron.hourly, Günlük /etc/cron.daily, Haftalı k Aylı k /etc/cron.weekly /etc/cron.monthly görevler için hazır görev klasörleri oluşturmuştur. Örneğin hergün çalıştırılmas ın ı istediğ imiz bir komut /etc/cron.daily/ klasörüne kabuk program olarak yerleştirilebilir. Bu öntanıml ı zamanlar haricinde kendi belirlediğiniz sürelerde çalışmasın ı istediğiniz komutların süre kodlamaların ı kendiniz yapmalısınız. Örnekler # her pazartesi sabah 3:30 da sistemin bellek kullanımını # /tmp/meminfo adl ı bir metin dosyası na yazan program 30 3 * * 1 root cat /proc/meminfo >> /tmp/meminfo # Her ayın ilk günü sabah 4:10 da yedek alan script 10 4 1 * * root /root/scripts/backup.sh /etc/crontab dosyas ı ile zamanlanm ış görev çalıştırmay ı yalnızca root kullanıcıs ı yapabilir. Root olmayan kullanıcılar crontab e komutu ile vi editor aracıl ığı ile zamanlanm ış görev yazabilirler. Kullanıcılar ın yazdıklar ı görevler
/var/spool/cron klasöründe tutulur ve cron program ı bunlar ı kullanıcının kendi haklarıyla çalıştırır. cron DAEMON programı her dakika /etc/crontab ve /var/spool/cron klasörünü kontrol ederek yeni eklenen görevleri öğrenir. 3.4. Cron servisini durdurmak ve başlatmak Başlatmak için service crond start (veya /etc/init.d/crond start) durdurmak için ise /sbin/service crond stop kullanılır. 3.5 At ve Batch cron komutu periyodik olarak çalıştırıcak komutlar için kullanılırken at ve batch komutlar ı ise istenen bir zamanda bir kereliğine çalıştırılacak komutlar içindir. Batch komutu ise sistemin yükü 0.8 in altına düştüğünde çalıştırılacak görevler için kullanılır. At yada batch komutunu kullanabilmek için at RPM paketi yüklü olmalıdır. rpm q at rpm paketi yüklü ise at DAEMON programının çalışıyor olduğu kontrol edilmelidir. service atd status 3.6. At komutu kullanımı at komutu belirli bir zamanda bir defalığına belirli bir komutu veya komutları çalıştırmakta kullanılır. Aşağıdaki komut saat 1:05 de ev dizininin içindekiler liste.txt dosyasına yazdırılıyor. # at 1:05 At> ls -l > /root/liste.txt At> (Boş bir son satır oluşturuyoruz ve Ctrl + D tuşuna basarak EOF işareti koyarak at komut satırından çıkıyoruz) Job 2 at 2004-07-10 11:03 #
Bu örnekte oluşturulan at işlemi 2 numaralı iş olarak iş listesine kaydedilmiştir. İş listesini görmek için # atq Komutu kullanılır. Bir at işinin zamanı geldiğinde çalıştırılır ve kuyruktan silinir. Oluşturduğumuz bir at işini zamanı gelmeden önce silmek için # atrm (at numarası) Kullanılır. Örneğin 2 numaralı işi silmek için # atrm 2 yazılır. At komutu ile sıkça kullanılan zaman ifadeleri at now Şimdi yap at now + 15 minutes 15 dakika sonra yap at now + 2 hours 2 saat sonra yap at now + 10 days 10 gün sonra yap at 15:00 tomorrow Yarın 15:00 de yap at 1:05am Sabah 1:05 de yap at 3:00 Aug 16,04 16 ağustos 2004 günü saat 3:00 de yap Eğer at ile yazılan komut yada scriptlerin standart çıktıya (ekrana) mesaj vermesi gerekmişse bu mesaj kullanıcıya email ile gönderilir. 3.7. Batch görevleri tanımlamak Batch komutu ise sistemin yükü 0.8 in altına düştüğünde çalıştırılacak görevler için kullanılır. Batch görevi tanımlamak at görevi tanımlamak ile tamamen aynıdır. Sistemin yükü 0.8 in altına düşer düşmez komut çalıştırılır. Eğer at ile yazılan komut yada scriptlerin standart çıktıya (ekrana) mesaj vermesi gerekmişse bu mesaj kullanıcıya email ile gönderilir. Bekleyen işleri görüntülemek için atq kullanılır. 3.8. batch servisini durdurmak ve başlatmak Başlatmak için service crond start (veya /etc/init.d/crond start)
durdurmak için ise /sbin/service crond stop kullanılır.