Cron Job Nedir? Gelişmiş Kılavuz ve Gerçek Hayat Senaryoları

Kutay Utku
4 dk okuma

Cron, Unix ve Linux tabanlı sistemlerde zamanlanmış görevleri çalıştırmak için kullanılan güçlü bir zamanlayıcı servisidir. Bu yazıda, cron job’ların temellerinden gelişmiş kullanım senaryolarına kadar kapsamlı bir rehber sunuyoruz.

Cron İfadesi Yapısı

Bir cron ifadesi beş zaman alanından oluşur:

*    *    *    *    *    [komut]
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- Haftanın Günü (0-6) (Pazar=0)
|    |    |    +---------- Ay (1-12)
|    |    +--------------- Ayın Günü (1-31)
|    +-------------------- Saat (0-23)
+------------------------- Dakika (0-59)

Özel Semboller ve Operatörler

Temel Operatörler:

  • * (Yıldız): Tüm geçerli değerler
  • , (Virgül): Değer listesi (1,3,5)
  • - (Tire): Değer aralığı (1-5)
  • / (Slash): Adım değeri (*/15 = her 15 dakikada bir)

Gelişmiş Semboller:

  • L: “Last” – Ayın son günü veya haftanın son günü
  • W: “Weekday” – İş gününe en yakın gün
  • #: “Nth” – Haftanın belirli bir günü (1#3 = ayın 3. Pazartesisi)

Pratik Cron Örnekleri

Temel Senaryolar:

# Her gün gece yarısı
0 0 * * * /path/to/script.sh

# Her Pazartesi saat 09:00
0 9 * * 1 /path/to/backup.sh

# Her ayın 1'inde saat 06:30
30 6 1 * * /path/to/monthly_report.sh

Gelişmiş Senaryolar:

# İş günleri (Pazartesi-Cuma) saat 17:00
0 17 * * 1-5 /path/to/daily_report.sh

# Her 10 dakikada bir
*/10 * * * * /path/to/monitor.sh

# Ayın ilk ve 15'inde
0 8 1,15 * * /path/to/invoice.sh

# Her çeyrek saatte bir
0,15,30,45 * * * * /path/to/cleanup.sh

Crontab Yönetimi

Temel Komutlar:

# Crontab düzenleme
crontab -e

# Mevcut cron job'ları listeleme
crontab -l

# Tüm cron job'ları kaldırma
crontab -r

# Başka kullanıcının cron'larını görüntüleme
crontab -u username -l

Özel Zamanlamalar:

# Sistem her başladığında
@reboot /path/to/startup_script.sh

# Her saat
@hourly /path/to/hourly_task.sh

# Her gün
@daily /path/to/daily_backup.sh

# Her hafta
@weekly /path/to/weekly_cleanup.sh

# Her ay
@monthly /path/to/monthly_report.sh

# Her yıl
@yearly /path/to/annual_check.sh

Gerçek Hayat Senaryoları

1. Veritabanı Yedekleme

# Her gün saat 02:00'de MySQL yedekleme
0 2 * * * /usr/bin/mysqldump -u user -ppassword database > /backups/db_$(date +\%Y\%m\%d).sql

# Haftalık tam yedekleme (Pazar 03:00)
0 3 * * 0 /path/to/full_backup.sh

2. Sistem İzleme

# Her 5 dakikada bir sistem yükünü kontrol et
*/5 * * * * /path/to/check_load.sh

# Her saat disk kullanımını raporla
0 * * * * /path/to/disk_usage_report.sh

3. Uygulama Bakımı

# Her gün gece yarısı log dosyalarını temizle
0 0 * * * find /var/log -name "*.log" -mtime +7 -delete

# Her ayın 1'inde cache temizleme
0 4 1 * * /path/to/clear_cache.sh

En İyi Uygulamalar

1. Loglama

Her cron job’ın çıktısını loglamak önemlidir:

0 * * * * /path/to/script.sh >> /var/log/cron.log 2>&1

2. Ortam Değişkenleri

Cron’un kendi ortamı olduğunu unutmayın:

# PATH ve diğer değişkenleri ayarlayın
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=admin@example.com

0 * * * * /path/to/script.sh

3. Hata Yönetimi

# Hataları e-posta ile bildir
MAILTO="sysadmin@example.com"
0 2 * * * /path/to/critical_job.sh || echo "Job failed at $(date)" | mail -s "Cron Job Failed" $MAILTO

4. Güvenlik

  • Sadece gerekli izinlere sahip kullanıcılar cron job oluşturabilmelidir
  • /etc/cron.allow ve /etc/cron.deny dosyaları ile erişimi kontrol edin
  • Kritik job’lar için özel sistem kullanıcıları oluşturun

Sorun Giderme İpuçları

  1. Cron Job Çalışmıyorsa:
  • PATH değişkenini kontrol edin
  • Komutun tam yolunu kullanın
  • Script’in çalıştırma izinleri olduğundan emin olun
  1. Logları İzleme:
   # Sistem cron log'ları
   tail -f /var/log/syslog | grep CRON

   # Kullanıcı cron log'ları
   grep CRON /var/log/syslog
  1. Test Etme:
   # Cron ifadesini test etmek için
   https://crontab.guru/

   # Script'i manuel çalıştırın
   bash -x /path/to/script.sh

Sonuç

Cron job’lar, sistem yönetiminde ve uygulama otomasyonunda vazgeçilmez araçlardır. Doğru şekilde yapılandırıldığında, tekrarlayan görevleri otomatikleştirerek zamandan tasarruf sağlar ve insan hatası riskini azaltır. Bu rehberde öğrendiğiniz teknikleri uygulayarak daha güvenilir, verimli ve otomatik sistemler oluşturabilirsiniz.

Cron job’larınızı düzenli olarak gözden geçirmeyi, logları izlemeyi ve gereksiz job’ları temizlemeyi unutmayın. İyi yapılandırılmış bir cron sistemi, sağlıklı bir sunucu ortamının temel taşlarından biridir.

💬 Yorum Bırak