
Yedekleme, e-posta kuyruğu, önbellek temizliği, veri senkronizasyonu — bunların hepsi belirli aralıklarla çalışması gereken işlerdir. Paylaşımlı barındırmada bu görevleri panel üzerinden tanımlarsınız, ama kurulum göründüğünden daha fazla tuzak barındırır.
Bu rehber, Linux hosting ve Windows hosting tarafında zamanlanmış görev kurulumunu ve en sık karşılaşılan sorunları anlatıyor.
En Büyük Tuzak: Sessiz Başarısızlık
Zamanlanmış görevlerin en tehlikeli özelliği şudur: başarısız olduklarında hiçbir belirti vermezler. Sayfa hatası oluşmaz, kimse şikayet etmez.
Yedekleme göreviniz haftalardır çalışmıyor olabilir ve bunu ancak yedeğe ihtiyaç duyduğunuz gün öğrenirsiniz. Bu yüzden görev kurmanın yarısı görevi yazmak, diğer yarısı çalıştığını doğrulamaktır.
1. Sürüm Sorunu
Bu, paylaşımlı barındırmada en sık karşılaşılan cron sorunudur ve teşhisi zordur çünkü kod aynıdır.
Web istekleri, hosting panelinde seçtiğiniz PHP sürümüyle çalışır. Zamanlanmış görevler ise sistem varsayılanıyla çalışabilir ve bu ikisi farklı olabilir. Siteniz sorunsuz çalışırken görevin "bu fonksiyon tanımsız" hatası vermesinin nedeni budur.
Çözüm: Görev komutunda kullanılacak sürümün tam yolunu açıkça belirtin. Panelinizin yardım bölümü genellikle bu yolu listeler; listelemiyorsa destekten isteyin.
2. Yol Sorunu
Zamanlanmış görev, sizin oturumunuzdan çok daha dar bir ortamda çalışır ve betiğin bulunduğu dizinde değil, hesabınızın ana dizininde başlar.
Sonuç: göreli yol kullanan bir betik dosyalarını bulamaz. "Komut satırında çalışıyor ama cron'da çalışmıyor" durumunun en yaygın nedeni budur.
Çözüm: Hem komutta hem betiğin içinde mutlak yollar kullanın. Betiğin başında çalışma dizinini açıkça belirlemek de işe yarar.
3. Çıktı Sorunu
Görevin ürettiği hata mesajları hiçbir yere yazılmıyorsa, başarısızlık tamamen görünmez olur. Bu, teşhis edilemeyen sorunların ana kaynağıdır.
Çözüm: Her görevin çıktısını bir log dosyasına yönlendirin — hem standart çıktıyı hem hata çıktısını. Bu tek değişiklik, görünmez sorunları görünür kılar.
Panel e-posta bildirimi sunuyorsa açın, ancak bunun bir sınırı olduğunu bilin: e-posta yalnızca görev çalışıp çıktı ürettiğinde gelir. Görev hiç tetiklenmiyorsa hiçbir e-posta almazsınız.
4. Sıklık Sorunu
Paylaşımlı barındırmada minimum çalışma aralığı genellikle sınırlıdır — dakikada bir çalıştırma çoğu pakette desteklenmez. Ayrıca çok sık çalışan görevler kaynak limitlerinizi tüketir.
Gerçekten ihtiyacınız olan sıklığı düşünün. "Ne kadar sık o kadar iyi" yaklaşımı, kaynak limitine takılmanıza ve tüm sitenizin yavaşlamasına yol açar.
Ayrıca tüm görevleri aynı dakikaya yığmayın. Saat başına kurulmuş beş görev, o dakikada ani bir yük sıçraması üretir. Birkaç dakika kaydırarak dağıtın.
5. Üst Üste Binme
Beş dakikada bir çalışan bir görev altı dakika sürüyorsa, ikinci kopya birincisi bitmeden başlar. Zamanla kopyalar birikir, kaynak limitiniz dolar ve veri bozulabilir.
Çözüm: Kilit mekanizması kullanın — görev başlarken bir işaret dosyası oluştursun, çalışan bir kopya varsa yeni kopya hiç başlamadan çıksın. Betiğin sonunda işaret dosyası silinmelidir.
Web Tabanlı Zamanlayıcının Sorunu
Bazı içerik yönetim sistemleri, zamanlanmış görevleri gerçek bir sistem görevi yerine siteye gelen ziyaretçi isteklerine bağlar. Bu yaklaşımın üç zaafı vardır:
- Trafik yoksa görev çalışmaz. Gece yarısı ziyaretçi gelmezse o saatte çalışması gereken iş yapılmaz.
- Ziyaretçi bekletilir. Görev bir kullanıcının isteği içinde çalıştığı için o kullanıcının sayfası yavaşlar.
- Zaman aşımına takılır. Uzun görevler yarıda kesilir ve kısmi işlem yapılmış olur.
Hosting paketiniz gerçek zamanlanmış görev destekliyorsa, sistemin web tabanlı zamanlayıcısını kapatıp panelden gerçek bir görev tanımlayın. Bu, kurulumu beş dakika süren ve güvenilirliği belirgin biçimde artıran bir değişikliktir.
Görevin Çalıştığını Doğrulamak
| Yöntem | Yakaladığı | Kaçırdığı |
|---|---|---|
| Panel e-posta bildirimi | Hata veren çalıştırmalar | Hiç çalışmayan görev |
| Log dosyası | Hata detayı | Okunmazsa hiçbir şey |
| Zaman damgası dosyası | Son başarılı çalışma anı | Elle kontrol gerekir |
| Dış izleme servisi | Hiç çalışmayan görev | — |
Basit ve etkili bir yöntem: görev başarıyla tamamlandığında bir dosyaya zaman damgası yazsın. O dosyaya baktığınızda görevin en son ne zaman gerçekten çalıştığını görürsünüz. Kritik görevler için ise dış bir izleme servisi kullanın — beklenen sürede sinyal gelmezse size haber verir ve hiç çalışmayan görevi yakalayan tek yöntem budur.
Görev Çalışmıyorsa: Teşhis Sırası
- Çıktıyı bir log dosyasına yönlendirin ve bir sonraki çalıştırmayı bekleyin.
- Log boş kaldıysa görev hiç tetiklenmiyor — zamanlama ifadesini ve panel tanımını kontrol edin.
- Log hata içeriyorsa mesajı okuyun; en olası nedenler yol eksikliği veya yanlış sürümdür.
- Komutu panelin terminal aracıyla (varsa) elle çalıştırıp sonucu görün.
- Hâlâ çözülmediyse, komutu tam yollarla en basit hâline indirgeyip adım adım karmaşıklaştırın.
Sonuç
Zamanlanmış görevlerde asıl risk hata değil sessizliktir. Tam yol kullanmak, sürümü açıkça belirtmek ve çıktıyı loglamak klasik tuzakları kapatır. Ancak kritik görevler için — özellikle yedekleme — bunlar yetmez: çalışmadığında haber veren bir izleme kurmak gerekir. Yedekleme göreviniz için bu izlemeyi kurmak, yedeklemenin kendisini kurmak kadar önemlidir.
Sıkça Sorulan Sorular (SSS)
Sitem çalışıyor ama cron hata veriyor, neden?
Büyük olasılıkla farklı bir yorumlayıcı sürümü kullanılıyor. Web istekleri panelde seçtiğiniz sürümle, zamanlanmış görevler sistem varsayılanıyla çalışabilir. Görev komutunda sürümün tam yolunu açıkça belirtin.
En sık ne kadar aralıkla görev kurabilirim?
Paketinize göre değişir; paylaşımlı barındırmada genellikle bir alt sınır vardır. Daha önemlisi, çok sık çalışan görevler kaynak limitlerinizi tüketir ve sitenizi yavaşlatır. Gerçekten gereken sıklığı seçin.
İçerik yönetim sisteminin kendi zamanlayıcısını kapatmalı mıyım?
Hosting paketiniz gerçek zamanlanmış görev destekliyorsa evet. Web tabanlı zamanlayıcı trafik olmadığında hiç çalışmaz ve çalıştığında bir ziyaretçiyi bekletir. Gerçek görev her iki sorunu da çözer.
Görevlerin üst üste binmesini nasıl engellerim?
Basit bir kilit dosyası yeterlidir: görev başlarken dosya oluşturur, bitince siler; dosya varsa yeni kopya hiç başlamaz. Kilidin eskime kontrolü de ekleyin — çöken bir çalıştırmanın bıraktığı kilit, sonraki tüm çalıştırmaları engellememelidir.