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
Comments
9 Comments
Ellerinize sağlık, çok güzel anlatım olmuş. Teşekkür ederim.
# 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.
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.
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.
Örnekler açıklayıcı olmuş. Allah razı olsun.
ders saatlerinde uyku moduna geç, teneffüs saatlerinde uyan… bunu nasıl yapabilirim? komutları tam yazarsanız sevinirim..
Merhaba sunucu bakımı sırasında çok dosya biriktiği için silmem gereken klasörler var örneğin /home/websitem/public_html/var/session klasorunu her gün içindekilerle birlikte gece saat 00:00 da silmesini istiyorum nasıl bir kod kullanabiliriz ?
Merhaba,
00 00 * * * rm -rf /home/websitem/public_html/var/session/*
Sayın hocam .php uzantılı bir sayfamın her gece saat 00.10’da çalışmasını istiyorum. Kodları nasıl olmalı. Şimdiden teşekkürler.
Leave a Comment