Unix/Linux Sistemlerde Zamanlanmış Görevler: Crontab

yasin orbay
Turk Telekom Bulut Teknolojileri
4 min readDec 21, 2022

Unix/Linux sistemlerde rutin işlerin belirli zaman aralıkları ile arka planda otomatik olarak yapılmasını crontab ile sağlıyoruz.Zamanlanmış görevleri yerine getiren servis cron ve bu servisin yerine getirdiği işlere de cron job denir.

Crontab dosyasında zamanı belirtmek için 5 alan bulunur .

1. Alan Dakika’yı temsil eder: 0 ile 59 arasında bir değer alabilir.
2. Alan Saati temsil eder. 0 ile 23 arasında bir değer alabilir.
3. Alan Ayın Günlerini temsil eder. 1 ile 31 arasında bir değer alabilir.
4. Alan Ayları temsil eder. 1 ile 12 arasında bir değer alabilir yada jan,feb,mar,apr … gibi ay bilgisi yazılabilir.
5. Alan Haftanın Günlerini temsil eder.0 ile 6 arasında bir değer alabilir yada sun,mon,tue,wed,thu,fri,sat gibi gün bilgisini gösteren değerler yazılabilir.

Crontab dosyasında kullanılan özel işaretleri inceleyelim;

“*” yıldız işareti her anlamına gelir. Örneğin saati temsil eden 1. Alana * yazılırsa her saat anlamına gelir.

# Her saatte bir ram çıktısını /tmp/ram dosyasına yazıyor.
0 * * * * /usr/bin/free > /tmp/ram

“-“ tire işareti ile aralık verilebilir. Örneğin ay’ı temsil eden 3. alana 1–3 yazdığımızı düşünürsek Ocak-Şubat ve Mart aylarında çalışacak bir crontab girdisi oluşturmuş oluruz.

# 2:00, 3:00, 4:00 saatlerinde script calısıyor
0 2–4 * * * /root/test.sh

“,” virgül işareti ile sadece belirli gün ve tarihler verilebilir .Örneğin gün alananına 1,15 yazarsak. Bu sadece ayın 1’i ve 15’inde çalışacak anlamına gelir.

# Her ayın 1 ve 15’de saat 6.30 ‘da script calısıyor
30 6 1,15 * * /root/yedek.sh

“/” slash işareti verilen zamanı bölmek için kullanılır. Örneğin her 5 dakikada bir çalışacak bir crontab için dakika kısmına */5 yazılabilir.

# Her 5 dk bir mrtg scripti calışıyor
*/5 * * * * /root/mrtg.sh

Crontab dosyası işlemlerini aşağıdaki komutları kullanarak yapabiliriz;

Crontab Sınırlamaları: Crontab’i kullanıcı adınız /etc/cron.allow dosyasında varsa veya böyle bir dosya bulunmuyorsa ve adınız /etc/cron.deny dosyasinda yoksa kullanabilirsiniz.Tüm kullanıcıların Crontab’i kullanabilmesi için cron.deny dosyasının bulunması ve boş olması gerekir. cron.deny dosyasi bulunmuyorsa Crontab’i yalnizca Root kullanıcı kullanabilir.

Anahtar kelimelerle crontab tanımlama:
@yearly
@daily
@hourly
@reboot

Saatlik, Günlük, Haftalık, Aylık cron’lar
Saatlik çalışması istenen programlar: /etc/cron.hourly
Günlük çalışması istenen programlar: /etc/cron.daily
Haftalık çalışması istenen programlar: /etc/cron.weekly
Aylık çalışması istenen programlar: /etc/cron.monthly

dizinleri altına çalıştırılabilir dosyalar halinde atılabilir.

Örnek Crontab Girdileri:
# 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

#Hergün öğlen 12 ve akşam 18'de Çalışacak Crontab Girdisi
00 12,18 * * * /komut/yada/script

#Sabah 9 Akşam 18 Arasında Her Saat Çalışacak Crontab Girdisi
00 09–18 * * * /komut/yada/script

Hafta İçi Günler Sabah 9 Akşam 18 Arasında Her Saat Çalışacak Crontab
00 09–18 * * 1–5 /komut/yada/script

Hergün öğlen 12 ve akşam 18'de Çalışacak Crontab Girdisi
00 12,18 * * * /komut/yada/script
00 — Her Saat (00 Saat başlangıcı)
12,18 — Öğlen 12'de ve Akşam 18'de
* — Her Gün
* — Her Ay
* — Haftanın Her Günü


Sabah 9 Akşam 18 Arasında Her Saat Çalışacak Crontab Girdisi
00 09–18 * * * /komut/yada/script
00 — Her Saat (00 Saat başlangıcı)
09–18 — Sabah 09'dan Akşam 18'e (09, 10, 11, 12, 13, 14, 15, 16, 17, 18)
* — Her Gün
* — Her Ay
* — Haftanın Her Günü


Hafta İçi Günler Sabah 9 Akşam 18 Arasında Her Saat Çalışacak Crontab
00 09–18 * * 1–5 /komut/yada/script
00 — Her Saat (00 Saat başlangıcı)
09–18 — Sabah 09'dan Akşam 18'e her saat. (09, 10, 11, 12, 13, 14, 15, 16, 17, 18)
* — Her Gün
* — Her Ay
1–5 — Pazartesi (1), Salı(2), Çarşamba(3), Perşembe(4), Cuma(5)

Zamanlama ifadeleri için hızlı ve basit bir düzenleyici olan https://crontab.guru web sayfasını kullanabilirsiniz.

https://crontab.guru/examples.html web linkinde hazır örneklerle de sık kullanılan cron ifadelerini görebilirsiniz:

--

--