- Konu sahibi
- #1
cPanel cron görevi çalışmıyorsa önce görevin gerçekten kaydedildiğini, komutta mutlak dosya yolları kullanıldığını ve komutun cPanel hesabınızın yetkileriyle elle çalıştığını kontrol edin. En sık nedenler; yanlış PHP yolu, göreli dosya yolu, çalışmayan script, eksik dosya izinleri, yanlış zaman alanları ve hatanın e-posta ya da log dosyasına yönlendirilmemesidir.
cPanel hesabınızda Terminal özelliği açıksa cPanel » Advanced » Terminal bölümünü açın. SSH veya Terminal erişiminiz yoksa hosting sağlayıcınızdan geçici test desteği isteyin.
Aşağıdaki yollar varsayımsal example hesabına aittir; kendi hesabınızın ana dizinine uyarlayın. Ayrı tanılama klasörü seçin ve aynı adlı gerekli dosyalarınızın üzerine yazmayın. Komutları root olarak değil cPanel hesabınızla çalıştırın. Örnek, uygulamadan bağımsız cron çalışmasını ayırır:
Başarılı sonuç,
Web isteği ile cron işlemi aynı çalışma ortamını kullanmaz. Web sunucusu bazı ortam değişkenlerini, çalışma dizinini ve siteye atanmış PHP sürümünü hazırlar. Cron ise komutu etkileşimli oturumdan farklı bir ortamda çalıştırır; çalışma dizini, PATH ve yüklenen başlangıç dosyaları farklı olabilir. Bu nedenle komutlarda dosyanın tam yolunu yazın;
PHP görevi çalıştırıyorsanız
Örneğin doğrulanmış PHP binary yolu
Uygulamanız çalışma dizinine ihtiyaç duyuyorsa komutun başında
Aşağıdaki ayrım, sorunun hangi katmanda olduğunu belirlemeyi kolaylaştırır.
Cron e-postası tanımlıysa komutun standart çıktısı ve hataları e-posta olarak gelebilir. Sessiz çalışmasını istiyorsanız hata kayıtlarını tamamen yok etmek yerine log dosyasına yönlendirin.
Tanılama tamamlanınca yalnız eklediğiniz heartbeat test görevini panelden kaldırın; mevcut üretim görevlerini değiştirmeyin. Asıl görevin zaman alanlarını gerçek plana göre kontrol edin. Asıl komutu önce Terminal'de aynı cPanel hesabıyla doğrulayın; başarılı çalışırsa cron satırına taşıyıp çıktıyı bir süre log dosyasında tutun. Sorun devam ederse hosting desteğine cron satırını, elle çalıştırılan komutun hata çıktısını ve ilgili log dosyasını birlikte iletin.
Hayır. Komut çıktı üretmiyorsa veya posta tesliminde sorun varsa e-posta gelmeyebilir. Görev kaydını, yönlendirdiğiniz çıktı dosyasını ve uygulamanın gerçek sonucunu ayrı kontrol edin; yalnız gelen kutusuna bakarak karar vermeyin.
PHP dosyasını PHP binary'siyle çağırıyorsanız genellikle dosyanın çalıştırılabilir olması gerekmez; dosyanın cPanel hesabı tarafından okunabilir olması yeterlidir. Shell scripti doğrudan çağıracaksanız çalıştırma iznini ayrıca kontrol edin.
Önce cron görevini elle test edin
cPanel hesabınızda Terminal özelliği açıksa cPanel » Advanced » Terminal bölümünü açın. SSH veya Terminal erişiminiz yoksa hosting sağlayıcınızdan geçici test desteği isteyin.
Aşağıdaki yollar varsayımsal example hesabına aittir; kendi hesabınızın ana dizinine uyarlayın. Ayrı tanılama klasörü seçin ve aynı adlı gerekli dosyalarınızın üzerine yazmayın. Komutları root olarak değil cPanel hesabınızla çalıştırın. Örnek, uygulamadan bağımsız cron çalışmasını ayırır:
- Terminalde cron klasörünü oluşturun:
Kod:mkdir -p /home/example/cron - Test scriptini oluşturun:
Kod:cat > /home/example/cron/heartbeat.sh <<'EOF' #!/bin/bash /bin/date '+%Y-%m-%d %H:%M:%S cron çalıştı' >> /home/example/cron/heartbeat.log EOF - Scripti çalıştırılabilir yapın:
Kod:chmod 700 /home/example/cron/heartbeat.sh - Elle çalıştırın:
Kod:/bin/bash /home/example/cron/heartbeat.sh cat /home/example/cron/heartbeat.log - Çıktıda tarih ve “cron çalıştı” metnini görüyorsanız test scripti çalışıyor demektir. Görmüyorsanız önce dosya yolu, kullanıcı yetkisi ve disk kotasını kontrol edin.
- cPanel » Advanced » Cron Jobs bölümünde yeni görev ekleyin. Test amacıyla Minute alanına
*/5, Hour, Day, Month ve Weekday alanlarına*girin. Command alanına şu komutu yazın:
Kod:/bin/bash /home/example/cron/heartbeat.sh >> /home/example/cron/cron-output.log 2>&1 - Beş ila on dakika sonra
heartbeat.logvecron-output.logdosyalarını kontrol edin.
Başarılı sonuç,
heartbeat.log içinde yeni tarih satırlarının oluşmasıdır. Bu çalışıyor ancak asıl uygulamanız çalışmıyorsa cron servisi değil, uygulama komutu veya uygulamanın çalışma ortamı sorunludur.| Belirti | Muhtemel neden | Sonraki işlem |
|---|---|---|
| Görev listede yok | Kaydedilmemiş veya Cron Jobs özelliği kapalı | Görevi yeniden ekleyin; özellik görünmüyorsa hosting firmasına başvurun. |
| Log hiç oluşmuyor | Zaman alanı, komut yolu veya cron servisi | */5 ile test edin, mutlak yollar kullanın ve görev çıktısını loga yönlendirin. |
| Log oluşuyor, hata yazıyor | Script, PHP sürümü, izin veya uygulama ayarı | Aynı komutu Terminal'de elle çalıştırıp hata metnini düzeltin. |
| Elle çalışıyor, cron'da çalışmıyor | Çalışma dizini veya ortam değişkeni eksik | cd, tam dosya yolları ve gerekli değişkenleri komuta açıkça ekleyin. |
Komut neden web sitesinde çalışıp cron altında çalışmaz?
Web isteği ile cron işlemi aynı çalışma ortamını kullanmaz. Web sunucusu bazı ortam değişkenlerini, çalışma dizinini ve siteye atanmış PHP sürümünü hazırlar. Cron ise komutu etkileşimli oturumdan farklı bir ortamda çalıştırır; çalışma dizini, PATH ve yüklenen başlangıç dosyaları farklı olabilir. Bu nedenle komutlarda dosyanın tam yolunu yazın;
script.php yerine /home/example/public_html/script.php kullanın.PHP görevi çalıştırıyorsanız
php kelimesine güvenmek yerine doğrulanmış PHP çalıştırıcısını kullanın. EasyApache 4 sistemlerinde /usr/local/bin/php CLI sarmalayıcısı dosyanın yapılandırılmış sürümünü seçebilir. cPanel sistemlerinde bu yol, seçilen PHP sürümüne göre /usr/bin/ea-php## biçiminde olabilir. Sunucunuzda hangi sürüm ve binary'nin kullanılabildiğini hosting sağlayıcınızdan veya Terminal'de command -v ile doğrulayın.Örneğin doğrulanmış PHP binary yolu
/usr/bin/ea-php82 ise komut şu yapıda olmalıdır:
Kod:
/usr/bin/ea-php82 /home/example/public_html/task.php >> /home/example/cron/task.log 2>&1
Uygulamanız çalışma dizinine ihtiyaç duyuyorsa komutun başında
cd kullanın:
Kod:
cd /home/example/public_html && /usr/bin/ea-php82 task.php >> /home/example/cron/task.log 2>&1
Belirtiye göre hızlı kontrol
Aşağıdaki ayrım, sorunun hangi katmanda olduğunu belirlemeyi kolaylaştırır.
Cron e-postası tanımlıysa komutun standart çıktısı ve hataları e-posta olarak gelebilir. Sessiz çalışmasını istiyorsanız hata kayıtlarını tamamen yok etmek yerine log dosyasına yönlendirin.
2>&1 ifadesi hata çıktısını da aynı loga gönderir.Sık yapılan hatalar
- Komutta
public_html/file.phpgibi göreli yol kullanmak. - Web sitesinde çalışan PHP sürümünün cron'da da otomatik olarak seçileceğini varsaymak.
- Scriptin bulunduğu klasörü çalışma dizini kabul etmek.
- Scripti çalıştırılabilir yapmadan doğrudan çağırmak veya yanlış kullanıcıya ait dosyaya erişmeye çalışmak.
- Cron görevi çok sık çalıştığı için önceki işlem bitmeden yenisinin başlamasına izin vermek.
- Hata çıktısını
/dev/nullile silip teşhis etmeye çalışmak.
Tanılama tamamlanınca yalnız eklediğiniz heartbeat test görevini panelden kaldırın; mevcut üretim görevlerini değiştirmeyin. Asıl görevin zaman alanlarını gerçek plana göre kontrol edin. Asıl komutu önce Terminal'de aynı cPanel hesabıyla doğrulayın; başarılı çalışırsa cron satırına taşıyıp çıktıyı bir süre log dosyasında tutun. Sorun devam ederse hosting desteğine cron satırını, elle çalıştırılan komutun hata çıktısını ve ilgili log dosyasını birlikte iletin.
Sık sorulan sorular
Cron e-postası gelmiyorsa görev kesin çalışmamış mıdır?
Hayır. Komut çıktı üretmiyorsa veya posta tesliminde sorun varsa e-posta gelmeyebilir. Görev kaydını, yönlendirdiğiniz çıktı dosyasını ve uygulamanın gerçek sonucunu ayrı kontrol edin; yalnız gelen kutusuna bakarak karar vermeyin.
Cron görevi için PHP dosyasına çalıştırma izni vermek gerekir mi?
PHP dosyasını PHP binary'siyle çağırıyorsanız genellikle dosyanın çalıştırılabilir olması gerekmez; dosyanın cPanel hesabı tarafından okunabilir olması yeterlidir. Shell scripti doğrudan çağıracaksanız çalıştırma iznini ayrıca kontrol edin.