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:
- Self-Hosted (Kendi Sunucunuzda Barındırılan WHMCS): Fiziksel sunucu, VPS veya cPanel/Plesk paylaşımlı hosting üzerinde kurulu olan standart WHMCS kurulumudur. Bu modelde sistem cron görevini işletim sistemi seviyesinde yapılandırmak tamamen sunucu yöneticisinin sorumluluğundadır. PHP binary yolunun belirlenmesi, doğru dizin izinlerinin verilmesi ve crontab girdisinin tanımlanması gerekir. PHP altyapısında cron yapılandırmasının genel temellerini PHP cron job rehberimizden inceleyebilirsiniz.
- Cloud ve Yönetilen Ortamlar: WHMCS Cloud veya bazı tam yönetilen SaaS barındırma çözümlerinde cron tetikleme altyapısı sağlayıcı tarafından arka planda işletilir. Ancak bu ortamlarda bile otomasyon saat dilimi ayarları, e-posta bildirim tercihleri ve günlük görev saatleri panel içerisinden kullanıcı tarafından yönetilir.
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.
- WHMCS yönetici paneline (Admin Area) giriş yapın.
- Ü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).
- Sayfanın en üstünde yer alan Cron Status (Cron Durumu) kutusunu inceleyin.
- 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 - Eğer güvenlik amacıyla
cronsdizininipublic_htmldışı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:
- Yeterli Bellek Limiti (memory_limit): WHMCS otomasyonu için en az 256 MB, büyük veritabanına sahip sistemlerde ise 512 MB bellek önerilir. Sunucu genelindeki CLI ayarını değiştiremiyorsanız komut içinde parametre vererek belleği artırabilirsiniz:
php -d memory_limit=512M -q /home/kullaniciadi/public_html/whmcs/crons/cron.php - PHP Sürüm Uyumu: Sunucunuzda birden fazla PHP sürümü yüklüyse (örneğin cPanel MultiPHP ortamı), varsayılan
phpikili dosyası WHMCS'nin gerektirdiği IonCube Loader ve PHP sürümünü karşılamayabilir. Örneğin WHMCS 8.x için PHP 8.1 gerekiyorsa tam ikili yolunu belirtmelisiniz:/usr/local/bin/ea-php81 -q /home/kullaniciadi/public_html/whmcs/crons/cron.php - Kritik PHP Fonksiyonları: CLI tarafında
proc_open,curl_execvepassthrugibi fonksiyonlarındisable_functionslistesinde bulunmadığından emin olun. Sunucu bazlı cron sorunlarını detaylı incelemek için cron job çalışmıyor rehberimizden faydalanabilirsiniz.
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ı:
- 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.
- Ortak Ayarlar (Common Settings) açılır menüsünden "Her 5 dakikada bir (*/5 * * * *)" seçeneğini işaretleyin.
- 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 - 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:
- Gün boyunca her 5 dakikada bir çalışan cron; e-posta kuyruğunu boşaltır, ticket güncellemelerini denetler ve API çağrılarını kontrol eder.
- Saat 09:00'a ulaşıldığında tetiklenen ilk cron çalışması (örneğin 09:00 veya 09:05 çalıştırması), günün Ana Otomasyon Görevi olduğunu algılar.
- Günlük otomasyonda etkin ayarlara göre şu işlemler gerçekleştirilebilir:
- Süresi yaklaşan yenilemeler için yeni faturaların oluşturulması (Invoicing).
- Fatura son ödeme tarihi hatırlatma e-postalarının müşterilere gönderilmesi.
- Gecikmiş faturalara gecikme faizi veya ceza ücretlerinin (Late Fees) eklenmesi.
- Ödemesi geciken hosting hesaplarının sunucu API'leri üzerinden askıya alınması (Suspension).
- Askı süresini aşan hesapların tamamen silinmesi (Termination - aktifse).
- Ödemesi alınmış ve yenilemeye uygun alan adları için kayıt operatörlerine yenileme emirlerinin iletilmesi.
- Desteklenen kur sağlayıcılarından alınan döviz kurlarıyla sistem kurlarının güncellenmesi (etkinse).
- Veritabanı yedeğinin alınıp belirlenen e-posta adresine gönderilmesi.
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:
- En üstte yeşil onay işaretiyle cron'un son çalışma zamanı görünmelidir.
- Daily Cron'un bugün başarıyla tamamlanıp tamamlanmadığı ve bir sonraki çalışma saati listelenir.
- Eğer burada kırmızı bir uyarı görüyorsanız ve son çalışma 24 saatten eskiyse cron servisiniz durmuş demektir.
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:
- Yetkisiz Erişimi Engelleme:
crons/cron.phpdosyası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. - 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:
- URL:
https://alanadiniz.com/whmcs/crons/cron.phpadresini girin. - HTTP Metodu:
GETveyaPOSTseçeneğini belirleyin. - Zamanlama: Standart 5 alanlı cron ifadesi kutusuna
*/5 * * * *yazın. Zaman diliminiEurope/Istanbulolarak seçin. - Yanıt Bekleme (Timeout): cronjob.com.tr, cron ifadeli görevlerde 290 saniyeye kadar yanıt bekler. WHMCS günlük faturalandırma sırasında işlem uzun sürebileceğinden işlem 290 saniyeyi ya da web sunucusunun kendi süre sınırını aşarsa zaman aşımı oluşabilir.
- Başarı Ölçütü: Sistem HTTP 200–399 arası yanıtları başarılı kabul eder.
- İzleme ve Bildirim: WHMCS sunucunuzda bir kesinti meydana gelirse, belirlediğiniz ardışık hata eşiği (varsayılan 3, 1–20 arasında ayarlanabilir) aşıldığında sistem kayıtlı e-posta adresinize bildirim gönderir. Sorun çözüldüğünde kesinti süresini içeren düzeltme raporu iletilir. Son 7 güne ait tüm yanıt kodları, süreler ve gövde günlükleri panelden incelenebilir. Aynı iş için bildirimler arasında en az 60 dakika bulunur.
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.