- Katılım
- 21 May 2023
- Mesajlar
- 602
- Tepki
- 17
- Puan
- 18
Yedek alma, önbellek temizleme, rapor gönderme gibi işleri elle yapmayı bir süre sonra kimse sürdüremiyor. Sunucu tarafında bu tekrarları devralan mekanizmanın adı cron; kurulumu birkaç satırlık iş ama o satırların dilbilgisi ilk bakışta yabancı geliyor.
Aşağıda cron görevinin ne olduğunu, beş zaman alanının nasıl okunduğunu ve satırı yazarken en sık nerede hata yapıldığını, standardın ve dağıtımın kendi kılavuz sayfalarına dayanarak bulacaksınız.
Cron job nedir?
Cron, belirlenen zamanlarda komut çalıştıran bir zamanlayıcı; her bir kayda "cron job" ya da Türkçesiyle zamanlanmış görev deniyor. Görevler kullanıcıya ait bir tabloda tutuluyor ve bu tablo `crontab` komutuyla yönetiliyor.
POSIX'in crontab tanımına göre `crontab -e` çağıran kullanıcının tablosunun bir kopyasını düzenlemeye açıyor, tablo yoksa boş bir kayıt oluşturuyor; `-l` mevcut kaydı listeliyor, `-r` ise kaydı tamamen kaldırıyor. Aynı standart komutların `sh` kabuğu tarafından çalıştırıldığını da belirtiyor.
Beş alan neyi ifade ediyor?
Bir satırın başındaki beş alan sırasıyla dakika, saat, ayın günü, ay ve haftanın gününü tanımlıyor. Ardından çalıştırılacak komut geliyor.
Debian'ın crontab(5) kılavuz sayfası izin verilen değerleri şöyle veriyor: dakika 0-59, saat 0-23, ayın günü 0-31, ay 0-12 (ya da ay adları), haftanın günü 0-7 — burada hem 0 hem 7 pazar anlamına geliyor, gün adları da kullanılabiliyor.
POSIX standardının aralıkları biraz daha dar: ayın günü 1-31, ay 1-12, haftanın günü 0-6 ve 0 pazar. Yani taşınabilir bir satır yazıyorsanız dar aralıkta kalmak, dağıtıma özgü esnekliklere yaslanmamak daha güvenli.
Yıldız, tire, virgül ve eğik çizgi
Alanların içindeki işaretler satırın asıl anlamını taşıyor:
- Yıldız (*): "ilk-son", yani alandaki bütün değerler. Saat alanındaki yıldız "her saat" demek.
- Tire (-): Aralık. Kılavuzun örneğinde saat alanındaki 8-11 ifadesi 8, 9, 10 ve 11'i kapsıyor.
- Virgül (,): Liste. 1,2,5,9 ya da 0-4,8-12 gibi yazımlar geçerli.
- Eğik çizgi (/): Adım. 0-23/2 iki saatte bir çalıştırma anlamına geliyor; */2 de aynı sonucu veriyor.
Bu dört işaret kavrandığında satırın geri kalanı sıradan bir kabuk komutundan ibaret kalıyor.
Görevin çalıştığı ortam sizin oturumunuz değil
En sık yanılgı burada: satır elle çalıştırıldığında sorunsuz işleyen bir komut, cron altında sessizce başarısız olabiliyor. Sebep ortam farkı. Kılavuz sayfasına göre cron bazı değişkenleri kendisi ayarlıyor: SHELL `/bin/sh` olarak tanımlanıyor, HOME ve LOGNAME `/etc/passwd` kaydından alınıyor.
Çıktının nereye gittiği de ayrı bir konu. POSIX, standart çıktı ve hata yönlendirilmemişse üretilen çıktının kullanıcıya postalanacağını söylüyor. Kılavuz sayfasındaki MAILTO değişkeni bu adresi belirliyor; boş bırakılırsa posta gönderilmiyor. Postayı okumuyorsanız çıktıyı bir dosyaya yönlendirmek, hataları görünür kılmanın en kısa yolu.
Klasik tuzak' Alıntı:Komut satırında ters eğik çizgiyle kaçırılmayan yüzde işareti (%) yeni satıra dönüşür ve sonrası komuta standart girdi olarak verilir. `date +%Y` gibi bir kalıp bu yüzden crontab içinde beklediğiniz gibi çalışmaz.
Kurmadan önce ve kurduktan sonra
Görevi eklemeden önce komutu kabukta tam yoluyla çalıştırıp beklenen çıktıyı gördüğünüzden emin olun; cron satırına da aynı tam yolları yazın. Ekledikten sonra ilk çalışma anını bekleyip sonucu doğrulayın, sonuç dosyasına ya da posta kutusuna bakın.
Zamanlanmış görevlerin en yaygın işi yedekleme oluyor; ancak yedeğin alınması tek başına yeterli değil, geri yüklenebildiğinin de sınanması gerekiyor. Bu sınamayı veritabanı yedeklerini ele aldığımız yazıda adım adım anlatmıştık. Görev bir siteyi ya da servisi yeniden başlatıyorsa, sonrasında sitenin gerçekten ayakta olduğunu doğrulamak için sorunun sizde mi sunucuda mı olduğunu ayırmaya ayırdığımız yazıdaki kontrol sırası işinizi görür. Düzenli bakım işlerini bir takvime bağlamak isterseniz web güvenliği bakım rutinini derlediğimiz yazı hangi işin hangi sıklıkta tekrarlanacağı konusunda çerçeve veriyor.
Sık Sorulan Sorular
Cron job nedir, ne işe yarar?
Belirli zamanlarda komut çalıştıran zamanlanmış görevdir; yedekleme, temizlik, rapor gönderme gibi tekrar eden işleri elle başlatmadan yürütmek için kullanılır.
Crontab satırındaki beş alan hangi sırayla yazılır?
Dakika, saat, ayın günü, ay ve haftanın günü sırasıyla yazılır; beşinci alandan sonra çalıştırılacak komut gelir.
Her iki saatte bir çalıştırmak için ne yazmalı?
Saat alanında adım işareti kullanılır: 0-23/2 ya da kısaca */2 aynı sonucu verir.
Cron görevi neden elle çalışıp zamanında çalışmıyor?
Çoğunlukla ortam farkından kaynaklanır. Cron SHELL değişkenini /bin/sh olarak ayarlar, HOME ve LOGNAME değerlerini /etc/passwd kaydından alır; komutları tam yoluyla yazmak bu farkın etkisini azaltır.
Görevin çıktısını nasıl görebilirim?
Çıktı yönlendirilmemişse POSIX'e göre kullanıcıya postalanır; MAILTO değişkeni bu adresi belirler, boş bırakılırsa posta gönderilmez. Alternatif olarak çıktıyı bir dosyaya yönlendirebilirsiniz.
Özetle
Cron görevi, beş zaman alanı ve bir komuttan oluşan tek satırlık bir kayıt. Alanların aralıkları dağıtımla standart arasında küçük farklar gösteriyor, o yüzden dar aralıkta kalmak taşınabilirliği artırıyor. Asıl hatalar zamanlamada değil ortam varsayımlarında çıkıyor: tam yol kullanmak, çıktıyı yönlendirmek ve yüzde işaretini kaçırmak ilk üç önlem.
Sizin sunucunuzda hangi iş hâlâ elle yapılıyor, onu bir satıra indirmek mümkün mü?
Güncelleme: 26 Ağustos 2026.
Dijital Dünyanıza Yön Veren Pusula