Cron job çalışmıyorsa komut yolu ve izinler nasıl kontrol edilir?

Cron job çalışmıyorsa PHP yolu, mutlak dosya yolu, izinler, log çıktısı ve sunucu zamanlamasını adım adım kontrol ederek hatayı hızlıca tespit edin.

Cron job tanımlandığı halde çalışmıyorsa sorun çoğu zaman zamanlama ifadesinden değil, komut yolundan, çalıştırma kullanıcısından veya dosya izinlerinden kaynaklanır. Özellikle paylaşımlı hosting ortamlarında PHP yolu, proje dizini ve güvenlik kısıtları sunucudan sunucuya değişebilir. Bu nedenle kontrolü rastgele denemelerle değil, adım adım ve çıktıyı doğrulayarak yapmak gerekir.

Cron job neden çalışmaz?

Cron görevleri arka planda çalıştığı için hata ekranda görünmez. Komut elle çalıştırıldığında sorunsuz görünebilir, ancak cron farklı bir ortam değişkeni, farklı kullanıcı ve sınırlı PATH bilgisiyle çalışır. Bu farklar; yanlış PHP yolu, eksik dosya izni, göreceli dizin kullanımı veya yazma yetkisi olmayan klasörler gibi hatalara yol açar.

İlk kontrol edilmesi gereken nokta, cron komutunun sunucuda gerçekten hangi kullanıcıyla çalıştığıdır. Kontrol panelinden eklenen görevler genellikle ilgili hesap kullanıcısıyla çalışır. SSH üzerinden root veya farklı bir kullanıcıyla test yapmak, yanıltıcı sonuç verebilir.

Komut yolunu doğru belirleme

Cron içinde komut yazarken mümkün olduğunca tam yol kullanılmalıdır. Çünkü cron, terminal oturumundaki çevresel değişkenleri aynı şekilde yüklemeyebilir. Örneğin sadece php script.php yazmak yerine PHP yorumlayıcısının ve çalıştırılacak dosyanın tam yolu belirtilmelidir.

/usr/bin/php /home/kullanici/public_html/cron/islem.php

PHP yolunu bilmiyorsanız SSH erişiminde aşağıdaki komutla kontrol edebilirsiniz:

which php

Kontrol paneli kullanan sistemlerde farklı PHP sürümleri için özel yollar bulunabilir. Örneğin uygulama PHP 8.2 ile çalışırken cron varsayılan PHP 7.4 ile tetiklenirse beklenmeyen hatalar oluşabilir. Bu durumda paneldeki PHP selector, MultiPHP veya benzeri alandan CLI PHP yolunu kontrol etmek gerekir.

Göreceli yol yerine mutlak yol kullanın

Script içinde include, require veya dosya okuma işlemleri varsa göreceli yollar cron altında bozulabilir. Bunun yerine uygulama kök dizinini sabitlemek daha güvenlidir.

require __DIR__ . '/ayarlar.php';

Bu kullanım, cron hangi dizinden çalışırsa çalışsın aynı dosyayı çağırır. WordPress, Laravel veya özel yazılım projelerinde cron hatalarının önemli bir bölümü bu küçük farktan kaynaklanır.

Dosya ve klasör izinleri nasıl kontrol edilir?

Cron görevinin çalıştıracağı dosyanın okunabilir, gerekiyorsa çalıştırılabilir olması gerekir. PHP dosyaları için çoğu senaryoda 644, klasörler için 755 izni yeterlidir. Ancak log yazılan, cache üreten veya çıktı dosyası oluşturan klasörlerde yazma izni de gerekir.

  • PHP dosyası okunabilir olmalı.
  • Log veya cache klasörü cron kullanıcısı tarafından yazılabilir olmalı.
  • Dosya sahibi, cron görevinin çalıştığı kullanıcıyla uyumlu olmalı.
  • 777 izni kalıcı çözüm olarak kullanılmamalı; güvenlik riski oluşturur.

SSH üzerinden izinleri görüntülemek için şu komut kullanılabilir:

ls -la /home/kullanici/public_html/cron/

Burada dosya sahibi ve grup bilgisi de önemlidir. Dosya başka bir kullanıcıya aitse, cron dosyayı okuyamayabilir veya oluşturulan log dosyasına yazamayabilir. Bu durum özellikle taşıma yapılan hosting hesaplarında sık görülür.

Çıktı ve hata kayıtlarını görünür hale getirme

Cron job çalışmıyorsa en hızlı teşhis yöntemi çıktıyı bir log dosyasına yönlendirmektir. Böylece hata mesajı, izin problemi veya PHP uyarısı doğrudan görülebilir.

/usr/bin/php /home/kullanici/public_html/cron/islem.php >> /home/kullanici/cron.log 2>&1

Bu komutta standart çıktı ve hata çıktısı aynı log dosyasına yazılır. Log dosyası oluşmuyorsa dizin yolu yanlış olabilir veya kullanıcının yazma izni yoktur. Log oluşuyor ancak boş kalıyorsa script hiç çıktı üretmiyor olabilir; geçici olarak ekrana yazı basan basit bir test satırı eklemek faydalıdır.

Zamanlama ifadesini de doğrulayın

Komut ve izinler doğruysa cron zamanlaması kontrol edilmelidir. Örneğin her 5 dakikada bir çalışması gereken görev için ifade şu şekilde olmalıdır:

*/5 * * * * /usr/bin/php /home/kullanici/public_html/cron/islem.php

Sunucu saat dilimi de dikkate alınmalıdır. Kontrol panelinde yerel saat gösterilse bile cron, sunucu saatine göre çalışabilir. Zaman hassasiyeti olan e-posta, yedekleme veya raporlama işlemlerinde bu fark yanlış teşhis yapılmasına neden olur.

Web URL ile cron çalıştırırken dikkat edilmesi gerekenler

Bazı sistemlerde cron, PHP dosyasını doğrudan çalıştırmak yerine bir URL çağırır. Bu yöntemde wget veya curl kullanılır. Ancak güvenlik duvarı, HTTP kimlik doğrulama, bakım modu veya IP kısıtı çağrıyı engelleyebilir.

/usr/bin/curl -s https://example.com/cron/islem.php

URL ile çalıştırma gerekiyorsa dosya herkese açık olmamalı, tahmin edilmesi zor bir anahtar veya IP kısıtı kullanılmalıdır. İşlem kritikse doğrudan CLI üzerinden çalıştırmak genellikle daha güvenli ve daha kararlıdır.

Pratik kontrol listesi

  • PHP yorumlayıcısının tam yolunu doğrulayın.
  • Script dosyasını mutlak yol ile çağırın.
  • Dosya sahibi ve izinlerini kontrol edin.
  • Log yönlendirmesi ekleyerek hatayı görünür yapın.
  • PHP sürümünün uygulamayla uyumlu olduğundan emin olun.
  • Cron zamanlamasını ve sunucu saat dilimini kontrol edin.
  • URL çağrılarında erişim engeli olup olmadığını test edin.

Bu kontrollerden sonra görev hâlâ tetiklenmiyorsa aynı komutu cron kullanıcısı ile SSH üzerinden çalıştırmak en net testtir. Komut terminalde hata veriyorsa sorun cron tanımında değil, komutun çağırdığı dosya, bağımlılık veya yetki yapısındadır. Yönetilen sunucu veya kurumsal hosting altyapılarında erişim kısıtları bulunabileceği için, hata çıktısıyla birlikte teknik destek ekibine başvurmak çözümü hızlandırır.

Kategori: Web Tasarım
Yazar: Editör
İçerik: 679 kelime
Okuma Süresi: 5 dakika
Zaman: 1 gün önce
Yayım: 02-07-2026
Güncelleme: 02-07-2026