Kısa cevap
Cron görevi genellikle crontab'deki yanlış sözdizimi, çalıştırma izninin olmaması, betiğe giden yanlış yol veya cron hizmetinin başlatılmamış olması nedeniyle çalışmaz. Günlükleri kontrol edin, betiği manuel olarak test edin ve mutlak yollar kullanın.
Sorun nasıl anlaşılır
- Görev planlanan saatte başlamıyor
- Beklenen çıktı veya dosya yok
- Cron günlüğü boş veya hatalar gösteriyor
- Betik manuel olarak çalışıyor ancak cron'dan çalışmıyor
- Hata bildirim e-postaları gelmiyor
En yaygın nedenler
Cron hizmeti başlatılmamış
Cron arka plan programı etkin değilse hiçbir görev yürütülmez. Hizmet durumunu kontrol edin ve gerekirse başlatın.
Crontab'de yanlış sözdizimi
Zaman alanlarındaki bir hata veya son satırın eksik olması yürütmeyi engelleyebilir. Biçimi kontrol edin ve etkin görevleri görmek için `crontab -l` kullanın.
Çalıştırma izni yok
Betiğin çalıştırma izni olmalıdır (`chmod +x`). Ayrıca cron'u çalıştıran kullanıcının dosya sahibi olup olmadığını kontrol edin.
Yanlış yol veya ortam
Cron sınırlı bir ortam kullanır, bu nedenle göreli yollar ve değişkenler sorun olabilir. Mutlak yollar kullanın ve değişkenleri açıkça tanımlayın.
İzin veya sahiplik sorunları
Betiğin eriştiği dosyalar cron kullanıcısı tarafından okunabilir olmalıdır. Dosya ve dizinlerin izinlerini ve sahipliğini kontrol edin.
Adım adım çözüm
- 1
Cron hizmetinin çalışıp çalışmadığını kontrol edin
systemctl status cron(veya bazı dağıtımlardasystemctl status crond) komutunu çalıştırın. Hizmet etkin değilsesudo systemctl start cronile başlatın vesudo systemctl enable cronile otomatik başlatmayı etkinleştirin. - 2
Etkin cron görevlerini gözden geçirin
Geçerli kullanıcının görevlerini görmek için
crontab -lkomutunu çalıştırın. Sistem görevleri için/etc/crontabdosyasına ve/etc/cron.d/dizinine bakın. Sözdizimi hatası olmadığından emin olun. - 3
Betiği manuel olarak test edin
Betiği, cron'u çalıştıran aynı kullanıcıyla terminalden çalıştırın. Manuel olarak çalışmıyorsa sorun cron'da değil betiktedir. Hataları düzeltin ve yeniden test edin.
- 4
Mutlak yollar kullanın
Crontab'de betiğe ve yorumlayıcıya giden tam yolu belirtin, örn.
/usr/bin/python3 /home/kullanici/betik.py. Aynı durum betiğin eriştiği dosyalar için de geçerlidir. - 5
Ortam değişkenlerini ayarlayın
Crontab'in başına
PATH=/usr/bin:/binve diğer gerekli değişkenleri ekleyin. Bunları betik içinde de tanımlayabilirsiniz. Etkileşimli oturumdaki değişkenlere güvenmekten kaçının. - 6
İzinleri ve sahipliği kontrol edin
Betiğin çalıştırma izni olduğundan (
chmod +x betik.sh) ve cron'u çalıştıran kullanıcının onu okuma ve çalıştırma hakkı olduğundan emin olun. Betiğin kullandığı dizinler ve dosyalar üzerindeki izinleri de kontrol edin. - 7
Cron günlüklerini gözden geçirin
systemd-journald kullanan sistemlerde
journalctl -u cronveyajournalctl -u crondkullanın. Diğer sistemlerde/var/log/syslogveya/var/log/crondosyasına bakın. Görevinizle ilgili hataları arayın. - 8
Çıktıyı geçici olarak bir dosyaya yönlendirin
Standart çıktıyı ve hataları yakalamak için crontab'deki satırın sonuna
>> /tmp/cron.log 2>&1ekleyin. Ardından görev yürütüldükten sonra dosyayı inceleyin. - 9
Zamanın doğru olup olmadığını kontrol edin
Sistem saatının doğru olduğundan emin olun (
date). Saat dilimi yanlışsa cron yanlış zamanda çalışır. Saat dilimini ve saat eşitlemesini ayarlayın.
Hiçbiri yardımcı olmazsa
Yukarıdakilerin tümünü kontrol ettiyseniz ve görev hala yürütülmüyorsa cron'u hata ayıklama modunda çalıştırmayı deneyin. Vixie cron için hizmeti kısa süreliğine durdurun ve sudo cron -f -x proc (veya cron'unuz için uygun seçenek) ile manuel olarak başlatın; testten sonra hizmeti yeniden başlatın. Bu, görev işleme hakkında ayrıntılı bilgi gösterecektir. Ayrıca, kullanıcının cron kullanmasını engelleyebilecek /etc/cron.allow ve /etc/cron.deny dosyaları aracılığıyla kısıtlamalar olup olmadığını kontrol edin. Son olarak, daha iyi günlükleme ve yönetim sunan systemd timer gibi bir alternatifi düşünün.
Tekrarlanmaması için
- Cron günlüklerini düzenli olarak kontrol edin
- Mutlak yollar ve açık değişkenler kullanın
- Betikleri cron'a eklemeden önce test edin
- İzinleri sınırlayın ve dosya sahipliğini izleyin
Ne zaman uzmana başvurmalı
Nedeni bulamıyorsanız veya günlüklere ve sistem dosyalarına erişiminiz yoksa IT desteğine başvurun. Sorunu daha hızlı izole edebilir ve iş akışındaki kesintileri önleyebilirler.
BT altyapı bakımı · Sunucular, ağlar, yedekleme, güvenlik ve yardım masasıSık sorulan sorular
Sözdizimi doğru olmasına rağmen cron görevim neden çalışmıyor?
En yaygın neden betiğin çalıştırma izninin olmaması veya yorumlayıcıya giden yolun yanlış olmasıdır. Betiğin manuel olarak çalıştırıldığında çalışıp çalışmadığını ve tüm yolların mutlak olup olmadığını kontrol edin.
Cron'un bildirdiği hataları nasıl görebilirim?
Crontab'e `>> /tmp/cron.log 2>&1` ekleyerek çıktıyı geçici olarak bir dosyaya yönlendirebilirsiniz. Ayrıca `/var/log/syslog` veya `journalctl -u cron` gibi sistem günlüklerini inceleyin.
Cron ile anacron aynı şey mi?
Hayır. Cron hassas zamanlama için tasarlanmıştır ancak bilgisayar kapalıysa kaçırılan görevleri çalıştırmaz. Anacron kaçırılan görevleri yürütmek için tasarlanmıştır ancak tam zamanı garanti etmez.