Kontrol panelinde cron job oluşturma

Hosting kontrol panellerinde cron job oluşturma adım adım kılavuzu: zamanlama ayarlarını doğru yapma, PHP yolunu doğru belirleme, hata ayıklama için çıktı kaydetme ve en yaygın hatalar.

6 dk Güncellendi 8 Aug 2026

Giriş: Hosting'de Cron Job Neden Gereklidir?

Web sitesi yönetimi dünyasında, birçok işlemin belirli zamanlarda otomatik olarak çalıştırılması gerekir. Veritabanının günlük yedeklenmesinden haber bülteni e-postalarının gönderilmesine, önbellek güncellemelerinden sipariş işlemlerine kadar. İşte bu noktada cron job devreye girer. Cron job, Linux işletim sistemlerinde, belirli zaman aralıklarında betikleri veya komutları çalıştırmanıza olanak tanıyan bir zamanlama aracıdır.

Paylaşımlı veya yönetilen hosting ortamlarında, genellikle cPanel, DirectAdmin veya Plesk gibi bir kontrol paneli bu özelliği sunar. Ancak sadece "Cron Job Ekle" düğmesine tıklamak yeterli değildir. Zamanlama yapısını yanlış girerseniz, PHP dosyasının yolunu hatalı yazarsanız veya hata çıktılarını göz ardı ederseniz, cron job'unuz ya çalışmaz ya da sessizce başarısız olur. Bu makalede, tam olarak nasıl verimli ve hata ayıklanabilir bir cron job oluşturacağınızı öğreneceksiniz.

Cron Job Zamanlama Yapısı: Sözdiziminden Uygulamaya

Her cron job'un kalbi, zamanlama ifadesidir (Cron Expression). Bu ifade, boşluklarla ayrılmış beş alandan oluşur:

* * * * * command_to_execute
| | | | |
| | | | +---- Haftanın günü (0-7) (0 ve 7 Pazar)
| | | +------ Ay (1-12)
| | +-------- Ayın günü (1-31)
| +---------- Saat (0-23)
+------------ Dakika (0-59)

Her alan bir sayı, bir aralık (örneğin 1-5), bir liste (örneğin 1,3,5) veya "tüm değerler" anlamına gelen bir yıldız (*) olabilir. Ayrıca adım (step) için / işaretini kullanabilirsiniz. Örneğin, dakika alanında */5 "her 5 dakikada bir" anlamına gelir.

Yaygın ve Kullanışlı Örnekler

  • Her gün saat 3'te çalıştırma: 0 3 * * *
  • Her 15 dakikada bir çalıştırma: */15 * * * *
  • Her Pazartesi ve Perşembe saat 20:00'de çalıştırma: 0 20 * * 1,4
  • Her ayın ilk günü çalıştırma: 0 0 1 * *

Önemli Not: Cron job'daki zaman, sunucunun saat dilimine (genellikle UTC) göre ayarlanır. Web siteniz İranlı kullanıcılar içinse ve Tahran saatine göre sabah 3'te çalışması gerekiyorsa, saat farkını (mevsime bağlı olarak genellikle +3:30 veya +4:30) hesaplamalısınız. Örneğin, kışın Tahran saatiyle sabah 3 için: 0 23 * * * (yani UTC 23:30).

PHP Yolunu Doğru Belirleme: En Yaygın Tuzak

Yeni başlayanların en büyük hatası, cron job'un tam olarak bir tarayıcı gibi çalıştığını varsaymaktır. Tarayıcıda, https://example.com/cron.php gibi bir adresi açarsınız ve sunucu dosyayı web sunucusu (Apache/Nginx) aracılığıyla çalıştırır. Ancak cron job doğrudan komut satırından (CLI) çalıştırılır ve HTTP veya web yolları hakkında hiçbir bilgisi yoktur.

Bu nedenle, cron job'a sunucu dosya sistemindeki dosyanın mutlak yolunu vermelisiniz. Bu yol genellikle /home/kullaniciadi/public_html/cron.php gibi bir şeydir. Tam yolu bulmak için kontrol panelini veya SSH'de pwd komutunu kullanabilirsiniz.

Cron Job'da PHP Çalıştırmak İçin Doğru Komut

En iyi yöntem, doğrudan PHP yorumlayıcısını çağırmak ve dosyanın yolunu ona vermektir. Çoğu hosting'de PHP CLI yolu /usr/local/bin/php veya /usr/bin/php gibidir. Nihai komut şu şekilde olacaktır:

/usr/local/bin/php /home/kullaniciadi/public_html/cron.php

PHP yolundan emin değilseniz, SSH'de which php komutunu kullanabilir veya hosting desteğinize sorabilirsiniz. cPanel kontrol panelinde, genellikle Cron Jobs bölümünde "PHP Path" adında bir seçenek bulunur ve yolu gösterir.

Yaygın Hata: PHP CLI Yerine wget veya curl Kullanmak

Bazı kişiler cron job'u wget -O /dev/null https://example.com/cron.php komutuyla çalıştırmaya çalışır. Bu yöntem çalışır, ancak bazı sorunları vardır:

  • Web sunucusuna bağımlıdır. Web sunucusu bozulursa, cron job da çalışmaz.
  • PHP'nin yürütme kısıtlamaları (örneğin max_execution_time) uygulanır; CLI'da bu genellikle sınırsızdır.
  • Hata çıktıları kolayca kaydedilemez.

Her zaman PHP CLI yöntemini kullanmanızı öneririm, ancak HTTP kullanmak için özel bir nedeniniz varsa (örneğin, belirli bir çerez veya başlık gerekiyorsa) bu geçerli olabilir.

Hata Ayıklama İçin Çıktı Alma: Cron Job'um Neden Çalışmıyor?

En büyük zorluklardan biri, sessizce başarısız olan cron job'larında hata ayıklamaktır. Betiğiniz hata verdiğinde ancak çıktısı hiçbir yere kaydedilmediğinde, sorunu teşhis etmek çok zorlaşır. Neyse ki, standart çıktıyı (stdout) ve standart hataları (stderr) bir dosyaya yönlendirebilirsiniz.

Çıktıyı Günlük Dosyasına Yönlendirme

> ve 2>&1 operatörlerini kullanın. Aşağıdaki komut, normal çıktıyı ve hataları public_html klasöründeki cron.log dosyasına gönderir:

/usr/local/bin/php /home/kullaniciadi/public_html/cron.php >> /home/kullaniciadi/public_html/cron.log 2>&1

Operatörlerin açıklaması:

  • >> : Çıktıyı dosyanın sonuna ekler (append). > kullanırsanız, dosya her seferinde baştan yazılır.
  • 2>&1 : Standart hataları (stderr), standart çıktının (stdout) gittiği yere yönlendirir. Yani her ikisi de aynı dosyaya kaydedilir.

Artık cron job her çalıştığında cron.log dosyasını açıp ne olduğunu görebilirsiniz. Dosya boşsa, betik hatasız çalışmıştır (veya hiç çalışmamıştır!). Bir hata varsa, dosyada tam olarak gösterilir.

Pratik Örnek: Veritabanı Yedekleme Betiği

Her gece saat 2'de MySQL veritabanınızın yedeğini almak istediğinizi varsayalım. backup.php betiğini /home/kullaniciadi/public_html/backup.php yoluna yerleştirdiniz. Cron job'unuz şu şekilde olmalıdır:

0 2 * * * /usr/local/bin/php /home/kullaniciadi/public_html/backup.php >> /home/kullaniciadi/public_html/backup.log 2>&1

backup.php dosyasının içinde, mysqldump komutunu çalıştırmak için exec() veya shell_exec() fonksiyonunu kullanın. Veritabanı kullanıcı adını ve şifresini mutlaka betiğin içine veya ayrı bir yapılandırma dosyasına koyun (ve bu dosyayı genel erişimden uzak tutun).

Gelişmiş Hata Ayıklama: Günlük Bile Yardımcı Olmadığında

Bazen günlük dosyası boştur ancak cron job çalışmaz. Bu durumlarda, birkaç şeyi kontrol edin:

  1. Dosya izinleri: PHP dosyanızın en az 644 (herkes tarafından okunabilir) iznine sahip olduğundan emin olun. Betik bir dosyaya yazma gerektiriyorsa, hedef klasörün 755 veya 777 iznine sahip olması gerekir (ihtiyaca bağlı olarak).
  2. Mutlak yol: SSH'de ls -l /home/kullaniciadi/public_html/cron.php komutuyla dosya yolunu tekrar kontrol edin. Basit bir yazım hatası cron job'u çalışmaz hale getirebilir.
  3. Bellek ve zaman sınırı: CLI ortamında, memory_limit ve max_execution_time sınırları genellikle sınırsızdır, ancak betiğiniz wget ile çalıştırılıyorsa, PHP-FPM sınırlamaları uygulanır.
  4. Sistem günlüğünü kontrol edin: Bazı hosting'lerde, cron sistem günlüğünü /var/log/cron veya /var/log/syslog yolunda görebilirsiniz. SSH erişiminiz varsa, cron job'unuzun sistem tarafından kaydedilip kaydedilmediğini görmek için grep CRON /var/log/syslog komutunu çalıştırın.

Gerçek Bir Senaryo: PHP Yolu Sorunu

Bir süre önce ServerNet kullanıcılarından biri, cron job'unun çalışmadığı sorunuyla karşılaştı. Günlük boştu ve betik tarayıcıda sorunsuz çalışıyordu. İnceleme sonucunda, kontrol panelinde yazdığı PHP yolunun /usr/bin/php olduğunu, ancak doğru yolun /usr/local/bin/php olduğunu fark ettik. Yolu değiştirince sorun çözüldü. Bu, yoldaki küçük bir farklılığın bile tüm işi bozabileceğini gösteriyor.

Sonuç: Cron Job'u Ciddiye Alın

Hosting kontrol panelinde bir cron job oluşturmak basit bir iştir, ancak gerçekten çalışması ve güvenilir olması için ayrıntılara dikkat etmelisiniz. Zamanlama yapısını doğru girin, PHP dosyasının mutlak yolunu doğru yorumlayıcıyla birleştirin ve her zaman çıktıyı bir günlük dosyasına yönlendirin, böylece bir sorun oluştuğunda hata ayıklama yapabilirsiniz. Bu ipuçlarına uyarak, cron job'unuz web sitesi görevlerini otomatikleştirmek için güçlü ve sorunsuz bir araç haline gelecektir.

Cron job desteği tam olan istikrarlı bir hosting arıyorsanız, Cron Jobs'a tam erişimli cPanel kontrol paneli sunan ServerNet'in Linux Hosting hizmetlerini kullanabilirsiniz. Ancak hosting seçiminden daha önemlisi, bu aracı doğru kullanmayı öğrenmektir; umarız bu makale bu konuda size yardımcı olmuştur.

Bu sayfa yardımcı oldu mu?