CRON ZAMANLANMIŞ GÖREVLER (Automated Tasks)
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. Ben bu yazıda crondan bahsediyor olacağım
- at
- cron
- batch
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. (Çoklu görevli işletim sistemlerinde, doğrudan interaktif kullanıcıyla etkileşimli olmaktan ziyade arka planda çalışan programlardır)
Cron servisinin çalışabilmesi için vixie-cron RPM paketi kurulmuş olmalıdır. Bu paketin kurulu olup olmadığını denetlemek için
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
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
Parametreler
İ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 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. (Yorum satırı)
Redhat Linux
- Saatlik /etc/cron.hourly,
- Günlük /etc/cron.daily,
- Haftalık /etc/cron.weekly
- Aylık /etc/cron.monthly
görevler için hazır görev klasörleri oluşturmuştur. Örneğin her gün çalıştırılmasını istediğimiz bir komut /etc/cron.daily/ klasörüne kabuk program olarak yerleştirilebilir.
Örnek:
#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 kullancı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.
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.
Cron hazırlamak için aşağıdaki adresler kolaylık sağlamaktadır: