Kısa Cevap: CPanel cron işlerinde
php script'in çalışmamasının temel nedeni, cron ortamının manuel çalışma ortamından farklı olmasıdır; bu durum genellikle eksik veya göreceli yollar, yanlış PHP yorumlayıcı yolu ve çalışma dizini sorunlarından kaynaklanır.
çözüm, mutlak yollar kullanmak ve script'in doğru çalışma dizinine geçmesini sağlamaktır.
CPanel'de manuel olarak sorunsuz çalışan bir PHP script'in cron işi olarak ayarlandığında hata vermesi veya hiç çalışmaması, saha tecrübelerimize göre oldukça yaygın bir durumdur. Bu, çoğunlukla cron ortamının kendi içindeki farklılıklarından, özellikle de ortam değişkenleri ve çalışma dizini yönetiminden kaynaklanır. Aşağıdaki adımları uygulayarak bu sorunu çözebilirsin.
Hazırlık ve Gereksinimler:
- CPanel yönetici paneline erişim.
- Çalıştırmak istediğin PHP script dosyasının sunucu üzerindeki Tam yolu (örneğin:
/home/kullaniciadi/public_html/dizin/script.php).
- Sunucundaki PHP CLI (Command Line Interface) yorumlayıcısının Tam yolu (genellikle
/usr/local/bin/php veya cPanel'in MultiPHP Manager'ına göre /opt/alt/phpXX/usr/bin/php gibi bir yol).
Adım 1: PHP CLI Yorumlayıcısının Tam Yolunu Belirle
Cron ortamı, genellikle `php` komutunu PATH değişkeninde bulamayabilir. Bu yüzden, PHP yorumlayıcısının sunucu üzerindeki tam yolunu bilmen ve kullanman şarttır. SSH erişimin varsa, aşağıdaki komutla kolayca bulabilirsin:
Which php
Veya farklı PHP versiyonlarını kullanan bir cPanel kurulumunda, hangi versiyonu kullanmak istediğine bağlı olarak şöyle bir komut işe yarayabilir:
/usr/local/bin/ea-php --version
Bu komutlar sana `/opt/alt/php74/usr/bin/php` benzeri bir çıktı verecektir. Bu yolu not al.
Adım 2: Script'in Çalışma Dizinini Ayarla ve Mutlak Yollar Kullan
Cron işleri varsayılan olarak genellikle kullanıcının ana dizininde (`/home/kullaniciadi`) çalışır. Eğer script'in içinde göreceli (relative) yollarla başka dosyalara (`include`, `require`) veya kaynaklara erişiyorsa, cron bu dosyaları bulamaz. Bu durumu aşmak için cron komutunda script'in bulunduğu dizine geçiş yapmalısın.
Script'in tam yolu /home/kullaniciadi/public_html/dizin/script.php ise, çalışma dizini /home/kullaniciadi/public_html/dizin olacaktır.
Adım 3: Cron Komutunu Oluştur ve Hata Ayıklama İçin Loglama Yapılandır
En sağlam cron komutu şu formatta olmalıdır:
Cd /home/kullaniciadi/public_html/dizin; /opt/alt/php74/usr/bin/php script.php > /home/kullaniciadi/cron-log.log 2>&1
Cd /home/kullaniciadi/public_html/dizin;: Bu kısım, cron işi başlamadan önce script'in bulunduğu dizine geçiş yapılmasını sağlar. Böylece script içindeki göreceli yollar doğru çalışır.
/opt/alt/php74/usr/bin/php: Adım 1'de bulduğun PHP CLI yorumlayıcısının tam yolu.
Script.php: Çalıştırılacak PHP script dosyasının adı. Artık doğru dizinde olduğun için tam yola gerek yoktur.
> /home/kullaniciadi/cron-log.log 2>&1: Bu kısım hayati öneme sahiptir. Script'in tüm çıktılarını (hem standart çıktısını hem de hata çıktılarını) belirtilen log dosyasına yönlendirir. Böylece script'in neden çalışmadığını veya hangi hatayı verdiğini bu dosyayı kontrol ederek görebilirsin.
Adım 4: CPanel Cron İşlerine Ekle
CPanel'e giriş yap, 'Cron İşleri' bölümüne git. Zamanlamayı (dakika, saat, gün, ay, hafta içi) script'inin çalışma sıklığına göre ayarla. 'Komut' alanına Adım 3'te oluşturduğun komutu yapıştır ve 'Yeni Cron İşi Ekle' düğmesine tıkla.
Dikkat Edilmesi Gerekenler:
- Script İçi Yollar: PHP script'inin içinde başka dosyaları `include` veya `require` ile çağırırken de mutlak yollar kullanmaya özen göster veya script'in başında `chdir(__DIR__);` veya `define('ROOT_PATH', __DIR__);` gibi ifadelerle kök dizini tanımla.
- PHP Limitleri: Cron ortamında PHP'nin bellek (`memory_limit`) ve çalışma süresi (`max_execution_time`) limitleri, web ortamından farklı olabilir. Eğer script'in büyük işlemler yapıyorsa, bu limitleri script içinde `ini_set()` fonksiyonu ile artırmayı düşünebilirsin.
- Dosya İzinleri: Script dosyasının ve üzerinde işlem yaptığı dizinlerin doğru okuma/yazma izinlerine sahip olduğundan emin ol (genellikle 644 veya 755 yeterlidir).
Sonuç:
Bu adımları eksiksiz uyguladığında, PHP script'in cron işi olarak atandığında, manuel çalışmada karşılaştığın sorunları yaşamadan, doğru ortamda ve belirtilen zamanlarda stabil bir şekilde çalışacaktır. Özellikle log dosyası, olası sorunlarda sana yol gösterecek en önemli araç olacaktır.
Aklına Takılabilir:
- `command not found` hatası sürekli çıkıyor, ne yapmalıyım? PHP yorumlayıcısının tam yolunu doğru yazdığından ve sunucuda o yolda bir PHP CLI bulunduğundan emin olmalısın.
- Log dosyası boş veya oluşmuyor, neden? Cron komutundaki loglama kısmını (`> /home/kullaniciadi/cron-log.log 2>&1`) kontrol et ve log dosyasının yazılacağı dizine yazma iznin olduğundan emin ol.