Cron ve crontab, Linux sunucuların bel kemiğidir. Veri yedeklemeden otomatik e-posta gönderimine, sistem güncellemelerinden rapor oluşturmaya kadar her şeyi zamanlanmış görevler sayesinde hallederiz. Peki ya bir gün bakarsınız ki cron çalışmıyor? Planladığınız işler aksamış, loglar boş, sunucunuz sessiz… İşte tam da bu yüzden, en sık yapılan 5 cron hatasını ve çözümlerini bilmek, size saatler sürecek bir uğraşı kurtarabilir.
1. Cron Görevi Hiç Çalışmıyor: Servis Durmuş Olabilir
En yaygın hata, cron servisinin aktif olmadığını fark etmemektir. Sunucuyu yeniden başlattığınızda veya bir güncelleme sonrası cron servisi durmuş olabilir. Kontrol etmek için terminalde systemctl status cron (systemd tabanlı sistemler) veya service cron status komutunu kullanın. Eğer servis durmuşsa systemctl start cron ile başlatabilirsiniz. Ayrıca systemctl enable cron ile her açılışta otomatik çalışmasını sağlayın.
2. Yol (PATH) Sorunları: Komut Bulunamıyor
Cron, çalıştığı ortamda PATH değişkenini sınırlı tutar. Normalde terminalde çalışan bir komut, cron içinde “command not found” hatası verebilir. Örneğin, python3 yerine sadece python yazarsanız ve sistemde python2 varsa hata alırsınız. Çözüm: crontab dosyasının başına PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ekleyin. Ya da komutun tam yolunu kullanın: /usr/bin/python3 /home/user/script.py gibi.
3. Çevre Değişkeni Eksikliği: Özel Değişkenler Tanımlanmamış
Cron, kullanıcının oturumundaki çevre değişkenlerini (örneğin HOME, USER, LOGNAME) otomatik almaz. Betiğiniz içinde $HOME gibi bir değişkene ihtiyaç varsa, crontab satırında veya betiğin başında tanımlayın. Örneğin: HOME=/home/kullanici satırını crontab’a ekleyin. Ayrıca betiğin kendisinde #!/bin/bash ve set -a ile tüm değişkenleri dışa aktarabilirsiniz.
4. Yanlış Zamanlama İfadesi: Dakika, Saat, Gün Karışıklığı
Cron ifadeleri 5 alandan oluşur: dakika, saat, ayın günü, ay, haftanın günü. En sık hata: her 5 dakikada bir çalışması için */5 * * * * yerine 5 * * * * yazmak (bu, her saat başı 5. dakikada çalışır). Ayrıca haftanın günü 0-6 arası (0=Pazar) veya 7=Pazar da olabilir. İfadenizi crontab.guru gibi online araçlarla test edin. Örnek: her gün saat 02:30'da çalışması için 30 2 * * *.
5. Log ve Çıktı Yönlendirme Eksikliği: Hataları Görememek
Cron varsayılan olarak çıktıyı e-posta ile gönderir (eğer posta servisi kuruluysa). Ancak çoğu sunucuda bu ayar yoktur ve hata mesajları kaybolur. Çözüm: crontab satırının sonuna > /var/log/cron_script.log 2>&1 ekleyerek tüm çıktıyı bir dosyaya yönlendirin. Ayrıca 2>&1 hataları da aynı loga ekler. Örneğin: 30 2 * * * /home/user/backup.sh >> /var/log/backup.log 2>&1. Bu sayede cron çalışmıyor diye endişelenmez, log dosyasına bakarak gerçek hatayı görürsünüz.
Cron Hatalarında Hızlı Kontrol Listesi
- Servis çalışıyor mu? (systemctl status cron)
- Komut tam yol ile yazılmış mı? (/usr/bin/komut)
- PATH ve diğer değişkenler tanımlanmış mı?
- Zaman ifadesi doğru mu? (Özellikle * ve */ farkı)
- Çıktı / hata loglanıyor mu? (> /log 2>&1)
- Crontab dosyası doğru kullanıcıda mı? (crontab -e)
- Betik dosyasına çalıştırma izni verilmiş mi? (chmod +x script.sh)
Bu 5 hatayı akılda tutarak crontab sorunlarının %90'ını çözebilirsiniz. Tabii ki daha karmaşık senaryolar da var: özel ortamlar, Docker konteynırları, SELinux izinleri… Ancak temel adımları kontrol ettiğinizde çoğu sorun kendiliğinden çözülür. Unutmayın, iyi yapılandırılmış bir cron sistemi, sunucunuzun sessiz kahramanıdır. Onun sesini duymak için logları kontrol etmeyi ihmal etmeyin.