Hosting

Cron Job Nedir? Zamanlanmış Görev Rehberi

Bu rehber cron job mantığını, zaman ifadesi okuma yöntemini, cPanel kurulumunu, WordPress otomasyonlarını, log kontrolünü ve güvenli kullanım önerilerini anlatır.

Yazan Onur Kaya 9 dk okuma 2 görüntülenme
Sunucu, saat ve terminal öğeleriyle cron job zamanlanmış görev otomasyonunu anlatan teknik illüstrasyon.
İçindekiler
  1. Cron Job nedir, nasıl çalışır?
  2. Cron sözdizimi nasıl okunur?
  3. cPanel üzerinden cron job oluşturma
  4. WordPress ve yedekleme otomasyon örnekleri
  5. Sık kullanılan cron job örnekleri
  6. Günlük PHP bakım komutu
  7. Geçici dosya temizliği
  8. Haftalık log arşivleme
  9. Uptime veya sağlık kontrolü
  10. Hatalar, loglar ve kontrol yöntemleri
  11. Güvenli ve verimli kullanım için öneriler
  12. Kısa toparlama

Cron Job nedir sorusu, sunucuda belirli aralıklarla otomatik işlem çalıştırmak isteyen herkesin karşısına çıkar. Bir yedekleme betiğini gece çalıştırmak, WordPress zamanlanmış görevlerini gerçek cron ile tetiklemek, eski geçici dosyaları temizlemek veya rapor e-postası göndermek için cron job kullanabilirsiniz. Doğru kurulduğunda sessizce çalışır, yanlış kurulduğunda ise gereksiz kaynak tüketimi, eksik yedek veya güvenlik riski doğurabilir.

Cron, Unix ve Linux tabanlı sistemlerde zamanlayıcı görevi gören bir arka plan servisidir. Siz bir zaman ifadesi ve komut tanımlarsınız, cron servisi de zamanı geldiğinde o komutu sizin adınıza çalıştırır. Paylaşımlı hosting ortamlarında çoğu işlem cPanel gibi kontrol panellerinden yönetilir. Root erişimli sanal veya fiziksel sunucularda ise crontab komutu, sistem cron dizinleri ve servis logları devreye girer.

Cron Job nedir, nasıl çalışır?

Cron job, belirli bir zamanda veya tekrarlayan aralıklarla çalıştırılan komut kaydıdır. Bu kayıt genellikle iki parçadan oluşur: zaman planı ve çalıştırılacak komut. Zaman planı, dakikadan haftanın gününe kadar beş alanla ifade edilir. Komut kısmında ise PHP dosyası, shell betiği, HTTP isteği, yedekleme komutu veya temizlik işlemi yer alabilir.

Örneğin her gece 03:00'te çalışan bir yedekleme betiği, her 15 dakikada bir kuyruk işleyen bir PHP komutu veya haftada bir log arşivleyen bir shell script cron job olabilir. Buradaki temel fikir, insan müdahalesi gerektiren tekrar eden işi güvenilir bir zamanlayıcıya devretmektir.

Sunucuda cron servisi sürekli çalışır ve tanımlı görevleri dakikalık aralıklarla kontrol eder. Zaman ifadesi o anla eşleşirse komutu başlatır. Komut başarıyla tamamlanırsa çoğu zaman ekranda hiçbir şey görmezsiniz. Hata oluşursa çıktı e-posta ile gönderilebilir, log dosyasına yazılabilir veya tamamen kaybolabilir. Bu nedenle cron job kurarken yalnızca zamanlamayı değil, çıktı ve hata yönetimini de düşünmelisiniz.

Bulutova web hosting altyapısında cPanel kontrol paneli bulunur ve zamanlanmış görevler cron jobs ile dakika hassasiyetinde çalıştırılabilir. Daha fazla işlem gücü, özel paketler veya root düzeyi kontrol gerekiyorsa sunucu çözümleri tarafına geçmek daha doğru olabilir.

Cron sözdizimi nasıl okunur?

Klasik cron ifadesi beş zaman alanı ve ardından komuttan oluşur. Bazı sistem dosyalarında kullanıcı alanı da bulunabilir, fakat kullanıcıya ait crontab kayıtlarında genellikle beş alan yeterlidir. Resmi Linux kılavuzlarında crontab, zaman alanları ile komutları ilişkilendiren tablo olarak ele alınır; ayrıntılı biçim için Linux crontab kılavuzuna bakabilirsiniz.

* * * * * komut
| | | | |
| | | | +-- haftanın günü, 0-7, pazar çoğu sistemde 0 veya 7
| | | +---- ay, 1-12
| | +------ ayın günü, 1-31
| +-------- saat, 0-23
+---------- dakika, 0-59

Yıldız işareti, ilgili alan için tüm değerler anlamına gelir. Virgül birden fazla değeri, kısa çizgi aralıkları, bölü işareti ise adım değerini belirtir. Örneğin */15 ifadesi ilgili alanda her 15 birimde bir çalışmayı anlatır.

İfadeAnlamıÖrnek kullanım
* * * * *Her dakikaKısa kuyruk kontrolü, dikkatli kullanılmalı
*/15 * * * *Her 15 dakikada birE-posta kuyruğu veya stok senkronizasyonu
0 3 * * *Her gün 03:00Günlük yedekleme
30 2 * * 1Her pazartesi 02:30Haftalık rapor üretimi
0 4 1 * *Her ayın 1'i 04:00Aylık arşivleme

Bir önemli ayrıntı şudur: Ayın günü ve haftanın günü alanlarını aynı anda sınırlamak beklediğinizden farklı sonuç verebilir. Bu nedenle karmaşık zamanlamalarda önce basit bir test komutu çalıştırın, ardından asıl komuta geçin.

cPanel üzerinden cron job oluşturma

Paylaşımlı hosting kullananlar için en pratik yol cPanel içindeki Cron Jobs ekranıdır. cPanel belgelerinde bu ekranın e-posta bildirimi, zaman aralığı seçimi ve komut girme alanlarıyla görev eklemeye yaradığı açıklanır. Ayrıntılar için cPanel Cron Jobs dokümantasyonu incelenebilir.

  1. cPanel'e girin: Hosting hesabınızın kontrol paneline erişin.
  2. Cron Jobs bölümünü açın: Genellikle Advanced veya Gelişmiş bölümünde yer alır.
  3. Bildirim e-postasını kontrol edin: Hata çıktılarının size ulaşmasını istiyorsanız geçerli bir adres yazın. Çok sık çalışan görevlerde gereksiz e-posta birikmesini önlemek için çıktıyı log dosyasına yönlendirin.
  4. Zaman aralığını belirleyin: Açılır seçenekleri kullanabilir veya özel cron ifadesi yazabilirsiniz.
  5. Komutu tam yol ile girin: PHP, wget, curl veya shell script yollarını varsayıma bırakmayın.
  6. Kaydedin ve test edin: Önce elle çalıştırılabilen güvenli bir komutla doğrulama yapın.

PHP dosyası çalıştırmak için çoğu ortamda komut satırı PHP kullanılır. Yol sunucu yapılandırmasına göre değişebilir. Emin değilseniz hosting panelindeki PHP bilgilerini veya teknik destek yönergelerini kontrol edin.

/usr/local/bin/php /home/kullanici/public_html/scripts/gorev.php >> /home/kullanici/logs/gorev.log 2>&1

Bir URL tetiklenecekse curl veya wget kullanılabilir. Ancak mümkün olduğunda doğrudan PHP dosyasını CLI ile çalıştırmak daha kontrollüdür. HTTP isteği kullanacaksanız URL'yi dışarıdan erişime açtığınızı, bu nedenle token veya IP kısıtı gibi önlem almanız gerektiğini unutmayın.

/usr/bin/curl -fsS "https://ornekalanadi.com/cron.php?token=uzun-rastgele-deger" >> /home/kullanici/logs/cron-url.log 2>&1

Komutun sonuna log yönlendirmesi eklemek, cron job gerçekten çalışıyor mu sorusuna hızlı yanıt verir. Sadece e-postaya güvenmek yerine görev bazlı log dosyası tutun.

WordPress ve yedekleme otomasyon örnekleri

WordPress kendi içinde WP-Cron adlı zamanlama sistemini kullanır. WordPress geliştirici dokümantasyonuna göre WP-Cron, eklenti ve tema geliştiricilerinin zamana bağlı görevler planlamasını sağlar. Fakat klasik sistem cronundan farklı olarak çoğu kurulumda ziyaretçi trafiğiyle tetiklenir. Resmi açıklamalar için WordPress Cron dokümantasyonuna bakabilirsiniz.

Trafiği düzensiz olan sitelerde zamanlanmış yazılar, yedekleme eklentileri veya e-posta görevleri beklenen saatte çalışmayabilir. Bu durumda WordPress'in varsayılan tetiklemesini kapatıp gerçek cron job ile wp-cron.php dosyasını belirli aralıklarla çağırmak daha tutarlı sonuç verebilir.

// wp-config.php dosyasına eklenebilir
define('DISABLE_WP_CRON', true);
*/15 * * * * /usr/bin/curl -fsS "https://ornekalanadi.com/wp-cron.php?doing_wp_cron" > /dev/null 2>&1

Burada 15 dakikalık aralık çoğu içerik sitesi için yeterlidir. Yoğun e-ticaret, üyelik veya eğitim platformlarında kuyruk yüküne göre daha kısa aralıklar gerekebilir. Yine de her dakika çalışan WordPress cron tetikleyicileri, paylaşımlı hosting kaynaklarını gereksiz yorabilir.

Yedekleme tarafında cron job çok yararlıdır, fakat yedekleri web kök dizininde tutmak hatadır. Dosya yedeklerini erişime kapalı bir dizine yazın, veritabanı yedeğini sıkıştırın, eski yedekleri belirli sayıda saklayın. Örnek yaklaşım şu şekildedir:

0 3 * * * /home/kullanici/scripts/yedekle.sh >> /home/kullanici/logs/yedek.log 2>&1

WordPress hosting kullanan sitelerde cron planı, önbellek eklentileri, yedekleme eklentileri ve PHP sürümüyle birlikte değerlendirilmelidir. Aynı saatte çalışan çok sayıda otomasyon, sitenin yanıt süresini etkileyebilir.

Sık kullanılan cron job örnekleri

Cron Job nedir öğrendikten sonra en hızlı ilerleme yolu, gerçek örnekleri okumaktır. Aşağıdaki komutları doğrudan kopyalamadan önce kullanıcı adını, dizinleri ve PHP yolunu kendi ortamınıza göre değiştirin.

Günlük PHP bakım komutu

0 2 * * * /usr/local/bin/php /home/kullanici/public_html/artisan schedule:run >> /home/kullanici/logs/artisan.log 2>&1

Laravel gibi uygulamalarda tek bir zamanlayıcı komut, uygulama içindeki görevleri yönetebilir. Bu kullanımda cron job, uygulamanın kendi zamanlayıcısını tetikler.

Geçici dosya temizliği

15 4 * * * find /home/kullanici/tmp -type f -mtime +7 -delete >> /home/kullanici/logs/temizlik.log 2>&1

Bu komut yedi günden eski geçici dosyaları siler. find komutunu kullanırken dizini çok net belirtin. Yanlış dizinde çalıştırılan silme komutları veri kaybına yol açabilir.

Haftalık log arşivleme

0 5 * * 0 tar -czf /home/kullanici/arsiv/log-$(date +\%Y\%m\%d).tar.gz /home/kullanici/logs/*.log

Crontab içinde yüzde işareti özel anlam taşıyabildiği için date komutundaki yüzde karakterlerini ters eğik çizgi ile kaçırmak gerekir. Bu küçük ayrıntı, birçok cron hatasının nedenidir.

Uptime veya sağlık kontrolü

*/10 * * * * /usr/bin/curl -fsS "https://ornekalanadi.com/health" >> /home/kullanici/logs/health.log 2>&1

Bu örnek basit bir sağlık kontrolü yapar. Gerçek izleme sistemi yerine geçmez, fakat uygulamanın belirli uç noktasının yanıt verdiğini düzenli olarak kayda alabilir.

Hatalar, loglar ve kontrol yöntemleri

Cron job çalışmıyorsa önce komutu zamanlayıcı dışında, terminal veya cPanel Terminal aracıyla elle çalıştırın. Elle çalışmayan komut cron altında da çalışmaz. SSH ile bağlanmanız gerekiyorsa SSH bağlantısı rehberi temel adımları anlamanıza yardımcı olur.

En yaygın hata, cron ortamının interaktif terminalden farklı olmasıdır. Terminalde çalışan bir komut, cron altında PATH değişkeni farklı olduğu için bulunamayabilir. Bu nedenle php, curl, wget, bash gibi araçlarda tam yol kullanmak daha güvenlidir.

  • Komut yolu yanlış: /usr/bin/php yerine sistemde /usr/local/bin/php kullanılıyor olabilir.
  • Dosya izni eksik: Shell script çalıştırılabilir değilse chmod +x gerekebilir.
  • Çalışma dizini farklı: Script göreli yol kullanıyorsa cron altında dosyaları bulamayabilir.
  • Çıktı bastırılmış: > /dev/null 2>&1 tüm çıktıyı yok eder, test aşamasında kullanmayın.
  • Zaman dilimi farklı: Sunucu zamanı ile beklediğiniz yerel saat aynı olmayabilir.
  • Çakışan görevler: Önceki çalışma bitmeden yenisi başlıyorsa sistem yükü artar.

Kontrol için basit bir test görevi oluşturabilirsiniz. Bu görev her beş dakikada bir log dosyasına tarih yazar. Dosya güncelleniyorsa cron servisi ve temel yönlendirme çalışıyor demektir.

*/5 * * * * date >> /home/kullanici/logs/cron-test.log 2>&1

Root erişimli sunucularda sistem logları da incelenebilir. Dağıtıma göre dosya adı değişebilir. Bazı sistemlerde /var/log/cron, bazılarında /var/log/syslog kullanılır. Servis yöneticisi olarak systemd bulunan sistemlerde journalctl çıktısı da yol gösterir.

grep CRON /var/log/syslog
journalctl -u cron --since "1 hour ago"

Güvenli ve verimli kullanım için öneriler

Cron job planlarken hedef yalnızca çalıştırmak değil, sürdürülebilir çalıştırmaktır. Özellikle web hosting ortamlarında gereksiz sık çalışan görevler aynı hesap altındaki site performansını etkileyebilir. Komutun ne kadar sürdüğünü ölçmeden her dakika çalıştırmak iyi bir varsayım değildir.

  1. En düşük gerekli sıklığı seçin: Saatlik çalışan bir raporu beş dakikada bir çalıştırmayın.
  2. Kilit mekanizması kullanın: Uzun süren görevlerde aynı işin ikinci kez başlamasını engelleyin.
  3. Log rotasyonu planlayın: Cron logları zamanla büyür. Eski kayıtları arşivleyin veya sınırlayın.
  4. Sırları komuta yazmayın: Parola ve API anahtarlarını crontab içinde açıkça tutmak yerine ortam dosyası kullanın.
  5. Yetkiyi daraltın: Görev hangi kullanıcıyla çalışıyorsa yalnızca gereken dosyalara erişsin.
  6. HTTP cron uçlarını koruyun: Rastgele uzun token, IP kısıtı veya uygulama içi imza doğrulaması kullanın.
  7. Ağır işleri yoğun olmayan saatlere alın: Yedekleme, rapor üretimi ve büyük senkronizasyonlar ziyaretçi trafiğinin düşük olduğu saatlerde çalışsın.

Çakışmayı önlemek için flock kullanılan örnek bir komut şu şekildedir:

*/10 * * * * /usr/bin/flock -n /tmp/gorev.lock /usr/local/bin/php /home/kullanici/scripts/gorev.php >> /home/kullanici/logs/gorev.log 2>&1

Bu yapı, önceki çalışma devam ediyorsa yeni çalışmayı başlatmaz. Özellikle dış API senkronizasyonu, büyük veri işleme ve yedekleme komutlarında yararlıdır.

Silme, taşıma ve yedek üzerine yazma işlemleri içeren cron job kayıtlarını önce test dizininde deneyin. Tek karakterlik yol hatası, geri dönüşü zor veri kaybına neden olabilir.

Kısa toparlama

Cron Job nedir sorusunun pratik yanıtı şudur: Sunucuda tekrar eden işleri belirlediğiniz saat ve aralıklarla otomatik çalıştıran görev kaydıdır. Doğru zaman ifadesi, tam komut yolu, log yönlendirmesi ve hata kontrolü bir araya geldiğinde cron job, bakım yükünü azaltır ve uygulamanın düzenli işlemlerini güvenilir hale getirir.

Başlarken küçük bir test komutu kullanın, ardından gerçek görevi ekleyin. WordPress, yedekleme, temizlik ve raporlama gibi işlerde her zaman kaynak tüketimini hesaba katın. Eğer görevleriniz paylaşımlı hosting sınırlarını aşıyorsa daha esnek sunucu ortamı değerlendirmek daha sağlıklı olur.

Sıkça Sorulan Sorular

Cron job ile WP-Cron aynı şey mi?

Hayır. Cron job sunucu işletim sistemi veya hosting paneli tarafından zamanlanan gerçek görevdir. WP-Cron ise WordPress içindeki zamanlama sistemidir ve çoğu kurulumda ziyaretçi trafiğiyle tetiklenir.

Cron job en sık hangi işler için kullanılır?

Yedekleme, geçici dosya temizliği, e-posta kuyruğu işleme, rapor üretme, stok veya veri senkronizasyonu için kullanılır. Tekrarlayan ve elle yapılması gereksiz olan işler için uygundur.

Her dakika cron job çalıştırmak doğru mu?

Sadece gerçekten gerekiyorsa doğru olabilir. Komut uzun sürüyorsa veya yoğun kaynak tüketiyorsa her dakika çalıştırmak çakışmaya ve performans sorunlarına yol açabilir.

Cron job çalışmadığında ilk ne kontrol edilmeli?

Önce komutu terminalde elle çalıştırın. Ardından dosya yollarını, PHP veya curl yolunu, dosya izinlerini, log çıktısını ve zaman dilimini kontrol edin.

Cron çıktısını tamamen kapatmak güvenli mi?

Canlı ve uzun süredir sorunsuz çalışan görevlerde çıktı kapatılabilir. Kurulum ve test aşamasında tüm çıktıyı kapatmak hataları görmenizi engeller, bu yüzden önce log dosyasına yönlendirmek daha iyidir.
Paylaş:

Yazar

Sistem Yöneticisi

Onur Kaya, Bulutova'da sistem yöneticisi olarak sunucu altyapısının, sanallaştırma platformunun ve hosting hizmetlerinin kurulumundan ve işletilmesinden sorumludur. VDS ve VPS sunucular, Linux ve Windows Server yönetimi, DNS, kurumsal e-posta altyapısı ve web sitesi güvenliği konularında günlük operasyonda karşılaşılan sorunlarla doğrudan ilgilenir. Blogda bu deneyimden yola çıkarak teknik konuları herkesin uygulayabileceği, adım adım rehberlere dönüştürür.

Tüm yazıları

İlginizi çekebilir

Tüm yazılar