2026-06-25

Cron Nedir? Linux Zamanlanmış Görevler ve Crontab Rehberi

Cron nedir, crontab sözdizimi nasıl yazılır, Linux ve sunucu ortamlarında periyodik otomatik görevler nasıl planlanır ayrıntılı rehberimizde.

cron-jobscrontablinux-sistemleriotomasyonzamanlanmis-gorevler
  • Cron, Unix ve Linux sistemlerde belirli zaman aralıklarında komut ve betik çalıştırmayı sağlayan arka plan zamanlayıcı servisidir (daemon).
  • Crontab (cron table) dosyası, 5 zaman parametresi (dakika, saat, ayın günü, ay, haftanın günü) ve çalıştırılacak komut yapısından oluşur.
  • Veritabanı yedekleme, e-posta gönderimi, log temizleme ve API senkronizasyon gibi otomatik sistem görevlerinde kullanılır.
  • Özel karakterler (*, ,, -, /) kullanılarak karmaşık zamanlama kuralları kolayca tanımlanır.

Unix ve Linux işletim sistemlerinde sunucu yönetiminin ve sistem otomasyonunun temeli zamanlanmış görevlere (Cron Jobs) dayanır. Sunucu yöneticileri ve yazılım geliştiriciler, rutin işlemleri insan müdahalesi olmadan otomatikleştirmek için cron altyapısını kullanır. Gece yarısı çalışan veritabanı yedeklerinden, saat başı güncellenen önbellek temizleme işlemlerine kadar tüm periyodik arka plan süreçleri cron ile yönetilir.

1. Cron ve Crontab Yapısının Çalışma Mantığı

Cron, sistem başlatıldığında arka planda bir servis (crond daemon) olarak çalışmaya başlar ve her dakika /var/spool/cron/ ve /etc/crontab altındaki zamanlama tablolarını kontrol eder. Eğer mevcut sistem saati tanımlanan bir kuralla eşleşirse, ilgili komut arka planda bağımsız bir süreç olarak çalıştırılır. Bu sayede sunucu performansı olumsuz etkilenmeden sistem bakımları ve rutin iş akışları başarıyla tamamlanır.

Kullanıcıların kendi zamanlama tablolarını oluşturmasını, düzenlemesini ve güvenlik izinlerine göre yapılandırmasını sağlayan temel komut crontab olarak adlandırılır. Terminal üzerinden sistem yönetiminde şu temel komutlar kullanılır:

# Mevcut kullanıcının crontab listesini görüntüler
crontab -l

# Crontab dosyasını düzenleme modunda açar
crontab -e

# Mevcut crontab dosyasını tamamen siler
crontab -r

Karmaşık cron ifadelerini analiz etmek, sözdizimi hatalarını tespit etmek ve Türkçe açıklamalarını detaylı biçimde görmek için cron açıklayıcı ve oluşturucu aracımızdan yararlanabilirsiniz.

2. Crontab Sözdizimi ve 5 Zaman Parametresi

Bir crontab satırı toplam 6 alandan oluşur. İlk 5 alan zaman kuralını, son alan ise çalıştırılacak Shell komutunu veya betiği belirtir:

* * * * * /path/to/command.sh
│ │ │ │ │
│ │ │ │ └─── Haftanın Günü (0 - 6) (Pazar=0 veya 7)
│ │ │ ────── Ay (1 - 12)
│ │ ──────── Ayın Günü (1 - 31)
│ ────────── Saat (0 - 23)
──────────── Dakika (0 - 59)

Sözdiziminde kullanılan özel operatörler şu şekildedir:

  • * (Joker): "Her biri" anlamına gelir. Örneğin saat alanındaki * her saat başı demektir.
  • , (Virgül): Birden fazla değer listelemek için kullanılır (1,15,30 -> 1, 15 ve 30. dakikalarda).
  • - (Tire): Değer aralığı belirtir (1-5 -> Pazartesiden Cumaya kadar).
  • / (Bölü): Adım adımlığı ifade eder (*/15 -> Her 15 dakikada bir).

Aşağıdaki tablo, en sık kullanılan örnek cron ifadelerini ve açıklamalarını detaylı biçimde içermektedir:

| Cron İfadesi | Çalışma Zamanı | Açıklama | |---|---|---| | * * * * * | Her dakika | Dakikada bir komutu tetikler. | | 0 * * * * | Her saat başı | Saat 00'da çalışır (örn. 01:00, 02:00). | | 0 0 * * * | Her gün gece yarısı | Her gün saat 00:00'da çalışır. | | 0 0 * * 1 | Her Pazartesi gece yarısı | Haftalık rutin temizlik için kullanılır. | | */30 * * * * | Her 30 dakikada bir | 0 ve 30. dakikalarda tetiklenir. |

Zaman damgaları, tarih dönüşümleri ve UNIX epoch süreleri ile çalışıyorsanız timestamp dönüştürücü aracımızı inceleyebilirsiniz.

3. En İyi Uygulamalar, Çıktı Yönlendirme ve Hata Yönetimi

Cron görevleri varsayılan olarak kullanıcı terminaline bağlı olmadığı için komut çıktısını (stdout) ve hataları (stderr) bir log dosyasına yönlendirmek kritik önem taşır:

# Çıktıları ve hataları log dosyasına yazdırma
0 2 * * * /home/user/backup.sh >> /var/log/backup.log 2>&1

# Çıktıları tamamen sessize alma (Dev Null)
*/10 * * * * /usr/bin/php /var/www/cron.php > /dev/null 2>&1

Cron görevleri tanımlarken dikkat edilmesi gereken temel ilkeler:

  • Tam Dosya Yolu (Absolute Path): Cron çalışırken standart kullanıcı kabuğunun $PATH değişkenine sahip değildir. Bu nedenle /usr/bin/python3 veya /bin/bash gibi mutlak yollar yazılmalıdır.
  • Çevre Değişkenleri (Environment Variables): Gerekli ortam değişkenleri crontab dosyasının en başına (PATH=/usr/local/bin:/usr/bin:/bin) eklenmelidir.
  • Çakışma Önleme: Uzun süren görevlerin bir sonraki cron tetiklemesiyle çakışmaması için dosya kilitleme (flock) mekanizması veya kilit dosyası kontrolü kullanılmalıdır.
  • Güvenlik İzinleri: Root (yönetici) yetkisi gerektirmeyen komutlar için standart kullanıcı crontab tercih edilmeli, sistem güvenliği riske atılmamalıdır.

4. Web Geliştirmede Cron Alternatifleri ve Servis Zamanlayıcılar

Modern web uygulamalarında geleneksel Linux Cron'a ek olarak farklı mimari zamanlayıcı çözümleri de tercih edilmektedir. Özellikle mikroservis ve bulut mimarilerinde esneklik sağlar:

  • Web tabanlı Cron (Webhooks): Sunucusuz (serverless) mimarilerde HTTP endpoint'lerine belirli aralıklarla GET veya POST isteği gönderen bulut zamanlayıcı servisleri tercih edilir.
  • Queue & Worker Sistemleri: Redis tabanlı BullMQ, Celery veya RabbitMQ gibi yapılaşmış kuyruk sistemleri, görevleri gecikmeli veya periyodik zamanlama ile sorunsuz çalıştırır.
  • Systemd Timers: Modern Linux dağıtımlarında systemd servislerine entegre çalışan zamanlayıcılar daha gelişmiş loglama, kaynak sınırlaması ve bağımlılık yönetimi sunar.

Sonuç olarak projenin ölçeğine ve altyapı mimarisine göre en uygun zamanlayıcı aracı seçilmeli, log takibi düzenli olarak yapılmalıdır.

Sıkça Sorulan Sorular

Cron görevi çalışmazsa sorunu nasıl tespit ederim?

İlk olarak /var/log/syslog veya /var/log/cron log dosyası kontrol edilmelidir. Ayrıca komut içindeki dosya yollarının mutlak (absolute) olup olmadığı ve betiğin çalışma izinleri (chmod +x) doğrulanmalıdır.

Crontab dosyasında 1 saniyelik görev planlanabilir me?

Hayır, standart Linux Cron en küçük zaman dilimi olarak 1 dakikayı destekler. Saniye seviyesinde zamanlama yapmak için sistem servisleri (systemd timer) veya loop içeren özel arka plan betikleri kullanılmalıdır.

> /dev/null 2>&1 ifadesi ne anlama gelir?

Bu ifade hem standart çıktıyı (stdout - 1) hem de hata mesajlarını (stderr - 2) kara deliğe (/dev/null) yönlendirerek görevin tamamen sessiz çalışmasını sağlar ve sistem mail gönderimini engeller.

Farklı zaman dilimlerinde (Timezone) cron nasıl çalıştırılır?

Crontab dosyasının başına CRON_TZ=UTC veya CRON_TZ=Europe/Istanbul satırı eklenerek cron servisinin hangi zaman dilimine göre tetikleneceği açıkça belirtilebilir.