Sistem Yönetimi
100%

Linux'ta Cron ile Görev Zamanlama ve Bash Betikleri

Sistem yöneticilerinin periyodik görevleri, yedeklemeleri ve sistem bakımlarını otomatize etmek için kullandığı Cron daemon ve Crontab kullanımı.

Genel Bakış

Linux işletim sistemlerinde, belirli zamanlarda veya periyotlarda otomatik olarak çalışması gereken komutları veya betikleri (script) yöneten arka plan servisine (daemon) cron denir. Kullanıcıların bu görevleri tanımladığı tablolara ise crontab adı verilir.

Sorun

Bir sistem yöneticisinin her gece saat 03:00'te veritabanı yedeği alması, haftada bir gün eski log dosyalarını temizlemesi veya her saat başı sistemin çalışıp çalışmadığını kontrol eden bir API çağrısı yapması gerekebilir. Bu işlemleri manuel olarak yapmak hem insan hatasına açıktır hem de sürdürülebilir değildir.

Çözüm: Crontab Tanımlaması

Kullanıcılar crontab -e komutunu kullanarak kendilerine ait görev listesini açar ve zamanlama formatına göre görevlerini kaydeder.

Örnek Crontab Sözdizimi:

# ┌───────────── dakika (0 - 59)
# │ ┌───────────── saat (0 - 23)
# │ │ ┌───────────── ayın günü (1 - 31)
# │ │ │ ┌───────────── ay (1 - 12)
# │ │ │ │ ┌───────────── haftanın günü (0 - 6) (Pazar 0)
# * * * * * komut_satiri

# Her gün gece 03:00'te yedekleme betiğini çalıştır:
0 3 * * * /opt/scripts/db_backup.sh

Teknik Detaylar

Cron sözdiziminde * karakteri "her" anlamına gelir. */15 şeklinde kullanıldığında "her 15 dakikada bir" anlamı taşır. Cron tarafından çalıştırılan betiklerin ortam değişkenleri (Environment Variables), normal kullanıcının SSH ile girdiği ortamdan farklıdır. Bu nedenle bash betikleri içinde dosya yolları her zaman tam yol (Absolute Path) olarak verilmelidir (örn. tar yerine /bin/tar). Cron çıktısı (stdout/stderr) varsayılan olarak kullanıcıya yerel e-posta olarak gönderilir. Bunu engellemek ve log tutmak için standart yönlendirme (>> /var/log/backup.log 2>&1) kullanılır.

Sonuç

Cron, onlarca yıldır Unix sistemlerinin en güvenilir otomasyon aracıdır. Ancak çok karmaşık bağımlılıkları olan görev zincirleri için modern sistemlerde systemd timers veya Apache Airflow gibi daha gelişmiş araçlara yönelim vardır.

İlgili Wiki'ler

Tümünü Gör