/var/log/cron ve Cron Mail Bildirimleri Rehber

LogYayın: Güncellendi: 9 dk okumaHazırlayan: cronjob.com.tr Editörleri

Linux sistem yöneticiliğinde en kritik prensiplerden biri, arka planda çalışan süreçlerin sessizce çökmesini engellemektir. Crontab üzerinde bir görev tanımladığınızda bu işlem terminalden bağımsız olarak alt kabukta çalıştırılır. Görev beklediğiniz sonucu üretti mi, sözdizimi hatası nedeniyle hiç tetiklenmedi mi yoksa izin yetersizliği yüzünden yarıda mı kesildi? Bu soruların cevabını alabilmenin yegane yolu sistemin cron günlüklerini (log) doğru incelemektir.

Red Hat tabanlı kurumsal Linux sistemlerinde zamanlanmış görevlerin ana kayıt merkezi /var/log/cron dosyasıdır. Ancak her Linux dağıtımı logları aynı dosyada saklamaz; örneğin Ubuntu ve Debian sistemlerde bu dosya varsayılan olarak bulunmaz. Ayrıca cron mekanizmasının çıktıları varsayılan olarak yerel e-posta sistemiyle (MAILTO) iletme davranışı, sunucuda uygun bir posta aktarım aracısı (MTA) yapılandırılmadığında disk alanının gizlice tükenmesine yol açabilir. Kapsamlı bir inceleme için genel cron job log rehberimizi de ziyaret edebilirsiniz.

Bu kılavuzda; /var/log/cron dosyasının mimarisini, RHEL/CentOS ile Ubuntu/Debian arasındaki günlük farklarını, log satırlarının sözdizimsel analizini, MAILTO parametresiyle e-posta akışını yönetmeyi, logrotate ile disk dolmasını önlemeyi ve sık karşılaşılan cron hatalarını adım adım ele alıyoruz.

/var/log/cron Dosyası Nedir ve Hangi Sistemlerde Bulunur?

/var/log/cron, Linux işletim sisteminde çalışan cron arka plan programının (crond) gerçekleştirdiği eylemleri kaydeden standart bir sistem günlüğüdür. Kullanıcıların crontab dosyalarını ne zaman düzenlediği (RELOAD), hangi kullanıcının hangi saat ve dakikada hangi komutu başlattığı (CMD) bu dosyaya saniye hassasiyetiyle işlenir.

Bu dosya başta Red Hat Enterprise Linux (RHEL), CentOS cron job sistemleri, Rocky Linux, AlmaLinux, Fedora gibi dağıtımlarda rsyslog yapılandırmasına bağlı olarak bulunur. Bu sistemlerde sistem log yöneticisi (genellikle rsyslog), /etc/rsyslog.conf veya /etc/rsyslog.d/ içerisindeki kural gereği cron olaylarını doğrudan bu dosyaya yönlendirir:

# /etc/rsyslog.conf içindeki cron kuralı
cron.*                                                  /var/log/cron

Bu satır sistemdeki cron log tesisine (facility) ait tüm öncelik seviyelerindeki kayıtların tek bir dosyada filtrelenmesini sağlar.

Dağıtımlara Göre Cron Log Mimarisi (RHEL/CentOS vs Ubuntu/Debian)

CentOS veya Rocky Linux'tan Ubuntu veya Debian'a geçen birçok yöneticinin karşılaştığı ilk şaşkınlık cat /var/log/cron komutunun "No such file or directory" hatası vermesidir. Debian ve Ubuntu ailesinde cron logları için ayrı bir dosya ayrılmaz; tüm sistem servislerinin logları /var/log/syslog dosyası içinde birleştirilir.

Farklı dağıtımlarda cron loglarına erişmek için kullanılan standart yöntemler şunlardır:

İşletim Sistemi Standart Log Yolu Önerilen Sorgulama Komutu
RHEL / CentOS / Rocky /var/log/cron sudo tail -f /var/log/cron
Ubuntu / Debian (Syslog) /var/log/syslog sudo grep -i CRON /var/log/syslog
Ubuntu / Debian (systemd) systemd journal sudo journalctl -u cron -f
Arch Linux / Minimal systemd journal sudo journalctl -u cronie -n 50

Eğer Ubuntu veya Debian sunucunuzda da tıpkı CentOS gibi ayrı bir cron dosyası oluşturmak istiyorsanız, /etc/rsyslog.d/50-default.conf dosyasını açıp #cron.* /var/log/cron.log satırının başındaki yorum işaretini kaldırabilir ve sudo systemctl restart rsyslog komutunu çalıştırabilirsiniz.

Cron Log Satırlarını Okuma ve Ayrıştırma (Syntax ve Parametreler)

Bir cron log dosyası incelenirken her satırın belirli bileşenlerden oluştuğu görülür. Tipik bir /var/log/cron satırı şu şekildedir:

Oct 15 04:00:01 web-prod crond[14285]: (root) CMD (/usr/local/bin/backup-db.sh >/dev/null 2>&1)

Bu satırın her parçası sistem analizi açısından belirli bir anlama gelir:

Kritik Uyarı: Cron log dosyasındaki CMD satırı sadece komutun başlatıldığını belgeler. Komutun başarılı bittiğini, yarıda hata verip kapandığını veya betik içi istisnaları (exception) doğrudan göstermez. Görevin iç durumunu takip etmek için çıktıları özel bir dosyaya yönlendirmeniz gerekir.

MAILTO Parametresi ile Çıktıları Yönetme ve Posta Kuyruğu Sorunları

Vixie Cron ve cronie standart olarak şu kurala göre hareket eder: Bir cron görevi çalışırken standart çıktıya (stdout) veya standart hata akışına (stderr) tek bir karakter bile yazarsa, cron daemon bu çıktıyı o kullanıcının yerel e-posta kutusuna iletmeye çalışır.

Crontab dosyasının başında MAILTO ortam değişkeni tanımlanarak bu iletilerin gideceği adres belirlenir:

# Çıktıları sistem yöneticisine gönder
MAILTO=sistem-admin@sirketiniz.com

0 3 * * * /usr/bin/python3 /scripts/rapor.py

Ancak günümüz sunucularının çoğunda Postfix veya Sendmail gibi yerel bir Posta Aktarım Aracısı (MTA) kurulu değildir veya düzgün yapılandırılmamıştır. Bu durumda iki tehlikeli senaryo yaşanır:

  1. MTA Yokluğu Hatası: Sistem günlüğünüz sürekli olarak (CRON) info (No MTA installed, discarding output) gibi hata veya uyarılarla dolarak log kirliliği yaratır.
  2. /var/mail Şişmesi: Eğer yerel posta servisi aktifse ancak kimse bu mailleri okumuyorsa, /var/mail/root veya /var/spool/mail/root dosyası her dakika çalışan görevler yüzünden gigabaytlarca büyür ve sunucunun kök diskini tamamen kilitler.

Bu sorunu kökten çözmek için crontab dosyasının en tepesine MAILTO="" satırını ekleyerek e-posta gönderimini tamamen devre dışı bırakabilirsiniz:

# Yerel e-posta gönderimini tamamen kapat
MAILTO=""

# Standart çıktıyı ve hataları harici log dosyasına yaz
0 3 * * * /usr/bin/python3 /scripts/rapor.py >> /var/log/rapor.log 2>&1

Log Dosyası Boyutunu Yönetme: Logrotate Yapılandırması

Sık aralıklarla (örneğin her dakika) çalışan yüzlerce cron görevinin bulunduğu yoğun bir sunucuda /var/log/cron dosyası hızla büyüyebilir. Bu dosyanın düzenli aralıklarla arşivlenmesi, sıkıştırılması ve eski kopyaların silinmesi için logrotate servisi kullanılır. Gereksiz log birikimini önleme adımları için cron log temizleme rehberimizi inceleyebilirsiniz.

RHEL ve CentOS sistemlerde standart cron logrotate kuralı genellikle /etc/logrotate.d/syslog altında tanımlanır. Aşağıdaki örnek haftalık rotasyon ve 4 kopya saklama kuralını gösterir; aynı log için mevcut kuralla çakışan ikinci bir tanım eklemeyin:

/var/log/cron {
    weekly
    missingok
    rotate 4
    compress
    delaycompress
    notifempty
    sharedscripts
    postrotate
        /usr/bin/systemctl kill -s HUP rsyslog.service 2>/dev/null || true
    endscript
}

Gerçek Kod Örnekleri

Sistem yöneticilerinin cron günlüklerini hızlıca analiz etmesini sağlayan pratik komut dizileri ve betikler:

Örnek 1: Son Hata veya Şüpheli Kayıtları Filtreleme

Aşağıdaki bash tek satırlık scripti, cron dosyasından başarısız olan veya hata bildiren kayıtları süzer:

sudo awk '/error/ || /failed/ || /ORPHAN/ {print $0}' /var/log/cron | tail -n 30

Örnek 2: Belirli Bir Kullanıcının Cron Çalıştırma Sıklığını Ölçme

Hangi kullanıcının sistemi ne sıklıkla meşgul ettiğini görmek için CMD satırlarını kullanıcı adına göre gruplayabilirsiniz:

sudo grep "CMD" /var/log/cron | awk -F'[()]' '{print $2}' | sort | uniq -c | sort -nr

Sık Karşılaşılan Hatalar ve Çözümleri

Cron günlüklerinde en sık karşılaşılan hata kalıpları, nedenleri ve çözüm yolları:

Hata 1: /var/log/cron: No such file or directory
Nedeni: Komutun Debian veya Ubuntu tabanlı bir sunucuda çalıştırılmasıdır. Bu dağıtımlar cron günlüklerini ayrı bir dosyada tutmaz.
Çözümü: Ubuntu ve Debian üzerinde cron kayıtlarını incelemek için sudo journalctl -u cron -n 50 --no-pager veya sudo grep -i CRON /var/log/syslog komutlarını kullanın.
Hata 2: postfix/sendmail[...]: fatal: open /etc/postfix/main.cf: No such file
Nedeni: Cron, ekrana çıktı üreten bir görevin raporunu e-posta ile iletmek istemiş ancak sunucuda kurulu veya yapılandırılmış bir posta sunucusu bulunamamıştır.
Çözümü: crontab -e ile tablonuzu açın ve en üst satıra MAILTO="" ekleyin. Böylece cron yerel posta sistemini tetiklemeyi bırakır.
Hata 3: crond[...]: (CRON) error (can't open or parse crontab)
Nedeni: Kullanıcı crontab dosyasında bozuk karakterler, geçersiz satır sonları (Windows CRLF formatı) veya sözdizimsel bir hata bulunmaktadır.
Çözümü: Crontab dosyasını doğrudan bir metin editörüyle elle açmak yerine mutlaka crontab -e arayüzü ile düzenleyin. Dosyanın sonuna boş bir yeni satır (newline) bırakmayı unutmayın. Görevleriniz tetiklenmiyorsa cron job çalışmıyor rehberimizdeki kontrol adımlarını izleyin.
Hata 4: /var/log/cron veya /var/mail diski tamamen doldurdu
Nedeni: Dakikalık çalışan görevlerin verbose (ayrıntılı) çıktı üretmesi veya standart hataların yönlendirilmemesi sebebiyle log dosyası kontrolsüzce büyümüştür.
Çözümü: Crontab görevlerinin sonuna >/dev/null 2>&1 ekleyerek gereksiz çıktıları susturun ve mevcut rotasyon kuralını kontrol edin: sudo logrotate -d /etc/logrotate.conf. Çıktıları susturmak cron'un CMD kayıtlarını veya mevcut posta dosyalarını küçültmez.

cronjob.com.tr ile HTTP Tabanlı Alternatif Kurulum (Bulut Tabanlı Log Konsolu)

Yerel sunucu disklerinde log dosyalarını yönetmek, logrotate kuralları yazmak, rsyslog yapılandırmalarıyla uğraşmak ve diskin dolup sunucuyu kilitlemesini engellemeye çalışmak ciddi bir operasyonel yük oluşturur. Üstelik sunucu çöktüğünde diske erişemediğiniz için görevin neden çalışmadığını gösteren logları da okuyamazsınız.

cronjob.com.tr platformu, HTTP çalışma kayıtlarını panelde sunan bulut tabanlı bir izleme ve konsol deneyimi sunar. Web sitenizin veya uygulamanızın arka plan görevlerini HTTP uç noktaları (URL) üzerinden zamanlayarak tüm çalıştırma kayıtlarını anlık olarak merkezi panelden izleyebilirsiniz.

Platformumuz tamamen ücretsizdir ve kayıt sırasında kredi kartı talep edilmez. Bulut tabanlı log ve izleme avantajları şunlardır:

Sıkça Sorulan Sorular (SSS)

Ubuntu'da /var/log/cron neden yoktur?

Ubuntu ve Debian tabanlı dağıtımlar cron günlüklerini ayrı bir dosyada tutmak yerine standart olarak /var/log/syslog dosyasına ve systemd journal günlük sistemine kaydeder.

Cron logunda görevin başarılı bittiğini nasıl anlarım?

Cron logundaki CMD satırı yalnızca görevin tetiklendiğini bildirir; görevin hata vermeden tamamlandığını doğrulamak için komut çıktısını bir dosyaya yönlendirmeniz veya çıkış kodunu kontrol etmeniz gerekir.

MAILTO="" koymak ne işe yarar?

Crontab dosyasının başına MAILTO="" tanımlamak, cron görev çıktılarının yerel e-posta kuyruğuna iletilmesini devre dışı bırakır ve /var/mail dizininin gereksiz şişmesini önler.

Log dosyasını canlı izlemek için hangi komut kullanılır?

RHEL ve CentOS sistemlerde tail -f /var/log/cron komutu, Ubuntu ve Debian sistemlerde ise journalctl -u cron -f komutu ile cron hareketleri anlık olarak izlenir.

Hemen Ücretsiz Cron Job Oluşturun

Cron işlerinizi HTTP uç noktalarına taşıyın: her çalışmanın durum kodu, yanıt süresi ve hata mesajı cronjob.com.tr paneline kaydedilir ve 7 gün saklanır; logrotate kuralı yazmadan merkezi izleme kazanırsınız. Ücretsiz; kayıtta kredi kartı gerekmez.

Ücretsiz Başla →

İlgili Rehberler