WHMCS Cron Job Kurulumu ve Otomasyon Hataları

WHMCSYayın: Güncellendi: 11 dk okumaHazırlayan: cronjob.com.tr Editörleri

Web hosting ve telekomünikasyon sektörünün en yaygın müşteri yönetimi ve faturalandırma yazılımlarından biri olan WHMCS, operasyonel işlevlerinin neredeyse tamamını zamanlanmış arka plan görevlerine borçludur. Fatura üretimi, son ödeme tarihi yaklaşan hizmetlerin hatırlatılması, ödenmemiş hosting hesaplarının otomatik askıya alınması (suspension), süresi dolan alan adlarının yenilenmesi veya iptal edilmesi, destek biletlerinin belirli süre yanıt gelmediğinde kapatılması ve döviz kurlarının güncellenmesi gibi hayati süreçler bir cron job tetikleyicisi olmadan gerçekleştirilemez.

Eğer WHMCS cron görevi zamanında çalışmazsa veya yürütülürken hata verip yarıda kesilirse işletmeniz ciddi aksaklıklarla karşılaşır. Müşterilere faturaları gitmez, otomatik kredi kartı tahsilatları yapılamaz, borcunu ödemiş kullanıcıların askıdaki hizmetleri aktifleşmez ve sunucu kaynak kullanım istatistikleri senkronize edilemez. Özellikle Türkçe hosting pazarında sunucu taşıma, PHP sürüm güncellemesi veya güvenlik amacıyla dizin yolu değiştirme sonrasında cron servisinin sessizce durması en sık karşılaşılan teknik sorunların başında gelir.

Bu rehberde; WHMCS self-hosted ve bulut ortamlarındaki otomasyon mimarisini, yönetim panelinden doğru cron komutunu tespit etmeyi, PHP CLI ortamı ile bellek limitlerini optimize etmeyi, cPanel ve Linux crontab üzerinde 5 dakikalık tetikleme kurulumunu, günlük otomasyon saatinin mantığını ve hata loglarını inceleyerek kesintileri gidermeyi adım adım ele alacağız. Ayrıca harici izleme ve HTTP tetikleme seçeneklerini değerlendireceğiz.

Self-hosted ve Cloud Ayrımı: WHMCS Otomasyon Mimarisi

WHMCS altyapısında otomasyon görevleri iki farklı dağıtım modeline göre değişkenlik gösterir:

Eski WHMCS sürümlerinde (v6 öncesi) fatura, e-posta ve yedekleme gibi işler için ayrı ayrı dosya yolları çalıştırılırdı. Modern WHMCS sürümlerinde (v7, v8 ve v9) ise tüm otomasyon tek bir merkezi dosya olan cron.php üzerinden yürütülür. Sistem bu dosyayı 5 dakikada bir çağırır ve dahili görev yöneticisi o an yapılması gereken işleri sıraya koyarak tamamlar.

Bu tek dosyalı model WHMCS'ye özgüdür; WiseCP gibi diğer faturalandırma panelleri kendi görev dosyalarını ve önerilen tetikleme aralıklarını tanımlar. WiseCP cron görevlerinin kurulumu ayrı rehberde anlatılır.

Doğru Cron Komutunu Bulma: WHMCS Yönetim Paneli Yönergeleri

WHMCS kurulumunuza ve sunucu mimarinize en uygun komutu tahmin etmek yerine doğrudan yönetim panelinizden almanız önerilir. WHMCS, kurulu olduğu dizin yolunu ve güvenliğe bağlı olarak taşınmış crons klasörünü otomatik algılar.

  1. WHMCS yönetici paneline (Admin Area) giriş yapın.
  2. Üst menüden Configuration (Yapılandırma) > System Settings (Sistem Ayarları) > Automation Settings (Otomasyon Ayarları) sayfasına gidin (eski sürümlerde Setup > Automation Settings).
  3. Sayfanın en üstünde yer alan Cron Status (Cron Durumu) kutusunu inceleyin.
  4. Burada sistemin size önerdiği hazır komut satırını göreceksiniz. Bu satır genellikle şu biçimdedir:
    */5 * * * * php -q /home/kullaniciadi/public_html/whmcs/crons/cron.php
  5. Eğer güvenlik amacıyla crons dizinini public_html dışına taşıdıysanız, panel bu yolu otomatik günceller ve taşıdığınız konumu gösterir.

Güvenlik amacıyla crons dizinini taşımak istiyorsanız; klasörü örneğin /home/kullaniciadi/whmcs_crons/ dizinine taşıdıktan sonra WHMCS ana dizinindeki configuration.php dosyasına şu satırı eklemelisiniz:

<?php
# configuration.php içine eklenecek yol tanımı
$crons_dir = '/home/kullaniciadi/whmcs_crons/';

Aynı şekilde taşınan dizin içindeki config.php dosyasına da WHMCS'nin ana kurulum yolunu $whmcspath = '/home/kullaniciadi/public_html/whmcs/'; olarak tanımlamanız gerekir. Aksi takdirde otomasyon betiği ana veritabanı ayarlarına ulaşamaz.

PHP CLI Yapılandırması ve php.ini Bellek Parametreleri

WHMCS cron betiği çalışırken veritabanındaki binlerce müşteri kaydını, faturaları ve alan adı whois sorgularını işleyebilir. Web tarayıcısı üzerinden çalışan PHP ile komut satırından (CLI) çalışan PHP'nin yapılandırma dosyaları çoğu sunucuda birbirinden bağımsızdır.

CLI ortamında bellek veya zaman aşımı sınırı yetersiz kaldığında cron süreci hiçbir hata mesajı vermeden aniden sonlanabilir. Sorunsuz bir otomasyon için CLI tarafında şu hususlara dikkat edilmelidir:

Beş Dakikalık Tetikleme: cPanel, Plesk ve Linux Crontab Kurulumu

WHMCS, sistem cron'unun 5 dakikada bir çağrılmasını önerir. Popüler hosting panellerinde bu görevin kurulum adımları şöyledir:

cPanel Üzerinde Kurulum

cPanel kontrol panelinde cron kurulumu için arayüz adımları:

  1. cPanel'e giriş yapın ve Gelişmiş (Advanced) bölümü altındaki Zamanlanmış Görevler (Cron Jobs) bağlantısına tıklayın. Daha ayrıntılı panel adımları için cPanel cron job rehberimizi inceleyebilirsiniz.
  2. Ortak Ayarlar (Common Settings) açılır menüsünden "Her 5 dakikada bir (*/5 * * * *)" seçeneğini işaretleyin.
  3. Komut (Command) kutusuna panelinizden kopyaladığınız CLI komutunu yapıştırın:
    /usr/local/bin/php -q /home/kullaniciadi/public_html/whmcs/crons/cron.php
  4. Yeni Zamanlanmış Görev Ekle (Add New Cron Job) butonuna basarak kaydedin.

Plesk Panel Üzerinde Kurulum

Plesk kullanan sunucularda ise Web Siteleri ve Alan Adları sekmesinden alan adınızı seçip Zamanlanmış Görevler (Scheduled Tasks) sayfasına gidin. Plesk kurulum adımlarının incelikleri için Plesk cron job kılavuzumuzdan yararlanabilirsiniz. Burada "Görevi Başlat" olarak PHP komut dosyası çalıştır seçeneğini seçebilir ya da doğrudan sistem komutu olarak */5 * * * * sıklığıyla komutunuzu kaydedebilirsiniz.

Linux SSH Terminali (crontab -e) Üzerinde Kurulum

Kendi sanal sunucunuzu (VDS/VPS) yönetiyorsanız görevi doğrudan ilgili kullanıcının crontab dosyasına yazmak en temiz yoldur:

# Kullanıcının crontab dosyasını düzenleyin
crontab -e

# Açılan editörün en altına şu satırı ekleyin:
*/5 * * * * /usr/bin/php -q /var/www/vhosts/alanadiniz.com/httpdocs/crons/cron.php > /dev/null 2>&1

Burada kullanılan 5 alanlı zaman ifadesinin ayrıntılı sözdizimi yapısını öğrenmek için crontab sözdizimi sayfamıza göz atabilirsiniz.

Günlük Otomasyon Saati (Daily Cron Hour) ve Görev Sırası

Kullanıcıların en çok yanılgıya düştüğü konulardan biri cron sıklığı ile günlük görevler arasındaki ilişkidir. WHMCS cron betiği her 5 dakikada bir çalıştırılsa bile, faturalandırma gibi ağır işler günde sadece bir kez yürütülür. Sık tetikleyici ile günde bir ağır tur ayrımı, e-ticaret sitelerinde sipariş ve stok görevlerinin planlanmasında da aynı biçimde kurulur.

WHMCS yönetim panelinde Automation Settings sayfasında Time of Day (Günün Saati) adında bir ayar bulunur. Örneğin bu ayar 09:00 olarak belirlenmişse:

Saat Dilimi Uyarısı: Sunucunuzun işletim sistemi saat dilimi (örneğin UTC) ile WHMCS'deki saat dilimi (Europe/Istanbul) farklıysa, günlük otomasyon beklediğiniz saatten 3 saat önce veya sonra çalışabilir. Sunucu yerel saatini date komutuyla doğrulayın.

Cron Status ve Automation Activity Log ile Doğrulama

Kurulumu yaptıktan sonra sistemin sağlıklı çalıştığından emin olmak için WHMCS içi denetleme araçlarını kullanmalısınız.

1. Automation Status Ekranı: WHMCS panelinde Utilities (Araçlar) > System (Sistem) > Automation Status (Otomasyon Durumu) sayfasına gidin. Burada:

2. Activity Log Kayıtları: Utilities > Logs > Activity Log sekmesine gidip filtre alanına Cron yazarak arama yapın. Aşağıdaki log satırlarını görüyorsanız otomasyon kusursuz işliyor demektir:

Cron Job: Starting Processing
Cron Job: Running Invoicing... Done
Cron Job: Running Suspensions... Done
Cron Job: Running Currency Auto Update... Done
Cron Job: Completed

Sık Karşılaşılan Cron Hataları ve Tamamlanmayan Görevler

WHMCS işletiminde sıklıkla karşılaşılan ve otomasyonun yarıda kesilmesine yol açan dört temel hata senaryosu şunlardır:

1. Bellek Yetersizliği Nedeniyle Yarıda Kesilme (Allowed Memory Size Exhausted)

Fatura veya alan adı sayısı arttıkça PHP CLI işlemi varsayılan 128 MB sınırını aşabilir. Ekrana veya loglara yansıyan tipik hata şöyledir:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in /path/to/whmcs/vendor/composer/...

Çözüm: CLI için kullanılan php.ini dosyasındaki memory_limit değerini 512M yapın veya cron komutunu php -d memory_limit=512M -q ... olarak güncelleyin.

2. Crons Dizin Yolu ve İletişim Hatası (Unable to Communicate)

crons klasörü taşındığında veya dosya izinleri bozulduğunda şu hata meydana gelir:

Unable to communicate with the WHMCS installation. Please verify the path in crons/config.php.

Çözüm: crons/config.php dosyasını açarak $whmcspath değişkeninin WHMCS ana kök dizinine işaret ettiğini ve sonunun eğik çizgi ile bittiğini doğrulayın. Ayrıca configuration.php içindeki $crons_dir yolunu kontrol edin.

3. Cron Kilit Dosyası Çakışması (Concurrency Lock / Incomplete Run)

WHMCS, iki cron sürecinin aynı anda çalışıp mükerrer fatura kesmesini önlemek için veritabanında veya dosya sisteminde bir kilit (lock) mekanizması kullanır. Önceki bir cron çalışması sunucu çökmesi veya bellek aşımı nedeniyle yarıda kalırsa kilit açık kalabilir ve sonraki çalışmalar engellenir:

Cron already running or previous run aborted unexpectedly. Lock active.

Çözüm: Önce başka bir cron sürecinin çalışmadığını doğrulayın. Sorunun nedeni giderildikten sonra tanılama amacıyla aşağıdaki komut kullanılabilir; -F, zamanı gelmeyen veya devam ediyor görünen görevleri de zorlar ve tekrar işlem riski taşır:

php -q /home/kullaniciadi/public_html/whmcs/crons/cron.php all -F -vvv

4. HTTP Tetiklemesinde 403 Forbidden ve Yetkilendirme Engeli

Eğer cron görevi bir URL üzerinden çağrılıyorsa ve sunucu güvenlik yazılımı (ModSecurity, Cloudflare veya IP kısıtlaması) gelen isteği engellerse 403 hatası alınır. crons dizinindeki .htaccess kurallarını veya güvenlik eklentilerini kontrol ederek yetkili IP adreslerine izin vermelisiniz.

cronjob.com.tr ile HTTP Tabanlı Cron Tetikleme ve Erişim Koşulları

Bazı paylaşımlı hosting ortamlarında sistem yöneticileri terminal erişimini (SSH) kapatır, crontab üzerinden 5 dakikadan sık aralık tanımlanmasını engeller veya CLI PHP betiklerinin çalışmasını güvenlik gerekçesiyle sınırlar. Bu tür kısıtlamaların bulunduğu durumlarda harici bir web tabanlı zamanlayıcı kullanmak en pratik çözümdür.

WHMCS, cron.php dosyasının HTTP veya cURL üzerinden çağrılmasını destekler. Ancak bu yöntemi kullanırken güvenlik önlemlerini doğru yapılandırmak şarttır:

  1. Yetkisiz Erişimi Engelleme: crons/cron.php dosyasının herkese açık olması sunucunuza istenmeyen HTTP istekleri gönderilerek performans kaybı yaşanmasına neden olabilir. Bu nedenle dosyanın bulunduğu dizine IP kısıtlaması getirilmeli veya web sunucusunda HTTP Basic Auth gibi bir erişim denetimi uygulanmalıdır.
  2. Harici Zamanlayıcı Yapılandırması: Ücretsiz bir HTTP zamanlama çözümü olan ücretsiz cron job servisi cronjob.com.tr üzerinde yeni bir zamanlanmış görev oluşturabilirsiniz.

cronjob.com.tr kontrol panelinde görevinizi tanımlarken aşağıdaki adımları izleyin:

Sıkça Sorulan Sorular (SSS)

WHMCS cron job neden her 5 dakikada bir çalışmalıdır?

WHMCS modern sürümlerinde görevleri anlık kuyruklara böler. E-posta kuyruğu, alan adı senkronizasyonu, bilet eskalasyonları ve modül kuyruklarının gecikmeden işlenmesi için ana tetikleyicinin her 5 dakikada bir çalıştırılması önerilir.

WHMCS günlük otomasyon (daily cron) hangi saatte çalıştırılmalıdır?

WHMCS yönetim panelinde Automation Settings altında belirlenen Time of Day saati genellikle sabah 08:00 veya 09:00 olarak yapılandırılır. Bu sayede müşteriler faturalandırma ve ödeme hatırlatma e-postalarını mesai başlangıcında alır.

Crons dizinini public_html dışına taşımak zorunlu mudur?

Zorunlu olmamakla birlikte güvenlik açısından şiddetle önerilir. Dizin web kök dizini dışına taşındığında kötü niyetli kişilerin cron.php dosyasını doğrudan tarayıcı üzerinden parametresiz tetikleyerek sunucuya yük bindirmesi engellenir.

WHMCS cron komutu terminalde nasıl test edilir?

SSH terminaline root veya cPanel kullanıcısı olarak bağlanıp php -q /tam/dizin/yolu/crons/cron.php -v komutunu çalıştırarak cron çıktısını ayrıntılı (verbose) modda doğrudan ekranda görebilirsiniz.

Hemen Ücretsiz Cron Job Oluşturun

cron.php uç noktanızı Basic Auth veya IP izniyle koruyup cronjob.com.tr'den */5 * * * * ile çağırabilirsiniz; cron ifadeli işlerde 290 saniyeye kadar yanıt beklenir, ardışık hatalarda e-posta alırsınız.

Ücretsiz Başla →

İlgili Rehberler