Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Cron Job'larınızı Etkin Yönetme: Çıktıları Loglama ve Hata Durumlarında E-posta Bildirimi Alma

pixero

Üye
Katılım
14 Mart 2026
Mesajlar
6
Merhaba arkadaşlar, bugün sizlere sunucu yönetiminin bel kemiği sayılabilecek cron job'ları nasıl daha profesyonel ve hatasız yönetebileceğinizi anlatacağım. Cron'lar arka planda sessiz sedasız çalışır ama bir hata olduğunda fark etmezseniz sorunlar büyüyebilir. Bu rehberle, her cron çalışmasının çıktısını düzenli loglayacak ve en ufak bir hatada anında e-posta ile uyarı alacaksınız. Böylece sunucunuzdaki otomasyonlarınızı güvenle takip edebilirsiniz.

📁 Cron Çıktılarını Loglama Yöntemleri

Cron job'larınızı standart bir şekilde loglamazsanız, neden başarısız olduklarını anlamanız çok zor olur. Benim genelde uyguladığım birkaç basit ve etkili yöntem var.

En temel yöntem, cron satırınızın sonuna yönlendirme operatörleri eklemek. Her cron çalıştığında hem standart çıktıyı (stdout) hem de hata çıktısını (stderr) aynı log dosyasına yazdıralım. Örneğin, mevcut crontab'ınız şöyle olabilir:

Bash:
     /home/user/script.sh

Bu satırı, aşağıdaki gibi loglama ekleyerek güncelleyebilirsiniz:

Bash:
     /home/user/script.sh >> /var/log/cron_script.log 2>&1

Buradaki `>>` işareti, çıktıyı dosyanın sonuna ekler (append). `2>&1` ise hata mesajlarını (2) standart çıktı (1) ile aynı yere, yani log dosyamıza yönlendirir. Eğer her seferinde yeni bir log dosyası oluşturmak isterseniz (ki önerim değildir) tek `>` kullanabilirsiniz.

✉️ Hata Durumunda E-posta Bildirimi Alma

Loglama iyi ama sürekli log dosyasını kontrol edemeyiz. İşte bu noktada cron'un kendi e-posta bildirim özelliği devreye giriyor. Cron, bir job çalıştığında ve sıfırdan farklı bir çıkış kodu (exit code) döndürdüğünde, çıktıyı belirtilen e-posta adresine gönderebilir.

Öncelikle, sunucunuzun e-posta gönderme (MTA - Mail Transfer Agent) servisinin kurulu ve yapılandırılmış olduğundan emin olun. Postfix veya Sendmail gibi. Ardından, crontab dosyanızın en üstünde `MAILTO` değişkenini tanımlayın:

Bash:
MAILTO="admin@alanadiniz.com, ikincimail@ornek.com"
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

`MAILTO` değişkenine birden fazla adresi virgülle ayırarak yazabilirsiniz. Artık, yukarıda loglama için yazdığımız cron satırı bir hata döndürdüğünde (yani script'iniz `exit 1` gibi sıfır olmayan bir değerle çıkış yaptığında), cron o çalıştırmaya ait tüm çıktıyı belirttiğiniz maillere gönderecektir.

⚠️ Kritik Uyarılar ve İpuçları

Buraya kadar her şey güzel, ancak bazı kritik noktalara dikkat etmezseniz sistem çalışmaz. Şu ayara çok dikkat etmelisiniz:

1. Log Dosyası İzinleri: Cron, genellikle kendi kullanıcısı veya root olarak çalışır. Log dosyasını oluşturmaya çalıştığı dizine yazma izni olmalıdır. /var/log/ gibi bir dizinde log tutacaksanız, önce dosyayı oluşturup izinleri ayarlamak daha sağlam olur:
Bash:
    sudo touch /var/log/cron_script.log
    sudo chown $USER:$USER /var/log/cron_script.log

2. Aşırı E-posta Selinden Kaçının: Script'iniz her çalıştığında çıktı üretiyorsa ve `MAILTO` tanımlıysa, cron HER SEFERİNDE size e-posta gönderir. Bu bir e-posta seline (mail flood) neden olabilir. Bu yüzden, sadece hata olduğunda e-posta almak istiyorsanız, script'inizi normal durumda sessiz (çıktı üretmeyecek şekilde), hata durumunda ise açık mesajlar döndürecek şekilde yazmalısınız. Veya loglamayı yapıp e-postayı sadece hata durumuna saklamalısınız.

3. Daha Akıllı Bir Yöntem: Benim sunucularda genelde kullandığım yöntem, her iki tekniği birleştirmek ve log dosyasını tarih bazında döndürmektir. Aşağıdaki örnek hem loglar, hem de sadece hata olduğunda e-posta gönderir:
Bash:
         /home/user/script.sh >> /var/log/cron_script_$(date +\%Y\%m\%d).log 2>&1 || (echo "Cron job hatası: /home/user/script.sh"; exit 1)
Buradaki `||` operatörü, sol tarafındaki komut başarısız olursa (sıfır olmayan çıkış kodu) sağ tarafı çalıştırır. Bu sayede sadece hata durumunda e-posta tetiklenir.

🔍 Örnek Bir Tam Cron Satırı ve Testi

Hepsini bir araya getirelim. Diyelim ki her gün gece yarısı yedek alan bir script'iniz var. Crontab girişiniz şöyle olabilir:

Bash:
MAILTO="sysadmin@bingunluk.com"
0 0    /root/scripts/backup.sh >> /var/log/backup/backup_$(date +\%Y\%m\%d).log 2>&1

Bu ayardan sonra, cron servisini yeniden yüklemeyi unutmayın:
Bash:
sudo systemctl reload cron   # systemd için
# veya
sudo service cron reload     # sysvinit için

Test etmek için bilerek hata verecek küçük bir script yazıp cron'a ekleyebilirsiniz. E-posta kutunuzu kontrol edin, bildirim geliyor mu?

Sonuç olarak, cron job'larınızı bu şekilde yapılandırmak sizi proaktif bir sistem yöneticisi yapar. Sorunları kullanıcılarınız fark etmeden önce siz fark eder ve müdahale edebilirsiniz.

Peki siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı veya daha pratik yöntemleriniz var mı? Cron loglarını takip etmek için ekstra araçlar (logrotate, monitoring sistemleri) kullanıyor musunuz? Deneyimlerinizi ve sorularınızı aşağıya yazmaktan çekinmeyin.
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri