Crontab ve Zamanlanmış Görevler

Crontab, kısaca zamanlanmış görevlerdir. Belirlediğimiz zaman süreçlerinde çalışmasını istediğimiz komut ya da scriptleri otomatik olarak çalışmasını sağlayan servistir.

Crontab aşağıdaki tabloda belirtilmiş olduğu gibi toplam 7 süreçten oluşur.

Alan Mana
1 Dakika (0-59)
2 Saat (2-24)
3 Gün (1-31)
4 Ay (1-12, Jan, Feb, …)
5 Haftanın günleri (0-6) 0=Sunday, 1=Monday …
or Sun, Mon, Tue, Wed, Thur, Fri
6 Komutu veya scripti çalıştırma hakkına sahip olan kullanıcı
7 Çalışacak komut ya da scriptler

Bir crontab dosyasında aşağıdaki gibi satır bulunur. Yukarıdaki tabloyu bakarak aşağıda ne yaptığımızı anlayabilirsiniz.

0 2 * * * root /home/murat/script.sh , dakika 0, saat 2, hergün, heray, haftanın hergünü, root kullanıcısı ve script.sh betik dosyası, Hergün saat 2:00 ‘da script.sh betiğinin çalışağını söylüyoruz.

# Dakika Saat Gün Ay Haftanın Gün Kullanıcı Script
0 8 * * Sun root /root/yedek.sh

root kullanıcı hakkı ile /root/yedek.sh dosyası her pazar günü saat 8:00 ‘da çalışacaktır.

Yukarıdaki satırın bulunduğu dosya /var/spool/cron dizini altındadır. Burada sadece root adı altında bir dosya bulunur(root kullanıcısı ile düzenliyorsak) ve bunu düzenleyerek crontab dosyamızı ayarlarız. Diğer bir yol ise benim en çok tercih etmiş olduğum crontab -e komutudur. Bu komutla direk /var/spool/cron/root dosyasını düzenlemiş oluyoruz.

crontab fonksiyonları

Kolsolda crontab –help yazarak kullanabileceğimiz fonksiyonları görebilirsiniz.

crontab -e : crontab dosyasını düzenler

crontab -l : crontab dosyasında bulunan zamanlanmış görevleri listeler

crontab -r : crontab dosyasını temizler.

Crontab ‘la zamanlanmış görevler yazmak zor geliyor ise /etc/ altında bulunan hazır cronları kullanabilirsiniz.

/etc/cron.hourly

/etc/cron.daily

/etc/cron.weekly

/etc/cron.mountly

Hazır zamanlanmış cronları kullanmak için yapmanız gereken, scriptinizi hazırlamak ve bu dizinlerin altına çalışma izniyle birlikte kopyalamaktır.

Crontab ‘ın ana konfigürasyon dosyası /etc/crontab altındadır. Burada cron ile ilgili mesajların hangi eposta adresine gideceğini, hazır zamanlanmış görevlerin hangi zamanda çalışacağı gibi ayarlara ulaşabilirsiniz.

/etc/crontab çıktısı,

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

Crontab ile ilgili örnekler

# Her saatte bir ram çıktısını /tmp/ram dosyasına yazıyor

0 * * * * /usr/bin/free > /tmp/ram

# 2:00, 3:00, 4:00 saatlerinde script calısıyor (2-4 gibi yazarsak aralık belirtmiş oluruz)

0 2-4 * * * /root/test.sh

# Her ayın 1 ve 15’de saat 6.30 ‘da script calısıyor

30 6 1,15 * * /root/yedek.sh

# Her 5 dk bir mrtg scripti calışıyor

*/5 * * * * /root/mrtg.sh

# Her cumartesi saat 11 ‘de disk.sh çalıştırılıyor

* 11 * * Sat /root/disk.sh

# Her 2 saatte bir script çalışıyor

* */2 * * * /root/test.sh

Sanırım uzun bir cron anlatımı oldu.Umarım anlatabilmiş ve yardımcı olabilmişimdir.

Sevgiyle Murat Uğur EMİNOĞLU


  1. htuna

    7 May

    Ellerinize sağlık, çok güzel anlatım olmuş. Teşekkür ederim.

  2. Engin Düzenli

    19 December

    # Her cumartesi saat 11 ‘de disk.sh çalıştırılıyor

    Demişsiniz bu seferde 11 de her dakika bası yedek alıyor dakika yı da yazmak gerekir diye düşüyorum. Ayrıca sat demişssiniz cumartesi gününe bunu neye göre yazdınız ve peki birde haftanın diğer günleri yazmamız gerekirse ne yazıcaz onlarıda pazartesiden pazar gününe kadar altta benim yorumun alttına diğer günleri de yazarmısınız acaba. rica etsem.
    takip edicem.

  3. Murat Uğur Eminoğlu

    21 December

    Merhabalar, yukarida belirttigim gibi “Haftanın günleri (0-6) 0=Sunday, Sun, Mon, Tue, Wed, Thur, Fri, Sat” seklinde ayarlaniyor. Dakika, yazilabilir de yazilmayabilirde.

    Saygilar.

  4. Engin Düzenli

    22 December

    Dakika yazmayınca belirlenen saatte her dakika boyunca yedekleme işlemi gerçekleştiriyor en azında 00 yazmak saaat başı diye ayarlamak gerekir bu nedenle ve çevapladığınız için teşekkür ederim.

Your email address will not be published. Required fields are marked *