İçindekiler
- Cron Job nedir, nasıl çalışır?
- Cron sözdizimi nasıl okunur?
- cPanel üzerinden cron job oluşturma
- WordPress ve yedekleme otomasyon örnekleri
- Sık kullanılan cron job örnekleri
- Günlük PHP bakım komutu
- Geçici dosya temizliği
- Haftalık log arşivleme
- Uptime veya sağlık kontrolü
- Hatalar, loglar ve kontrol yöntemleri
- Güvenli ve verimli kullanım için öneriler
- 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-59Yı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.
| İfade | Anlamı | Örnek kullanım |
|---|---|---|
* * * * * | Her dakika | Kısa kuyruk kontrolü, dikkatli kullanılmalı |
*/15 * * * * | Her 15 dakikada bir | E-posta kuyruğu veya stok senkronizasyonu |
0 3 * * * | Her gün 03:00 | Günlük yedekleme |
30 2 * * 1 | Her pazartesi 02:30 | Haftalık rapor üretimi |
0 4 1 * * | Her ayın 1'i 04:00 | Aylı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.
- cPanel'e girin: Hosting hesabınızın kontrol paneline erişin.
- Cron Jobs bölümünü açın: Genellikle Advanced veya Gelişmiş bölümünde yer alır.
- 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.
- Zaman aralığını belirleyin: Açılır seçenekleri kullanabilir veya özel cron ifadesi yazabilirsiniz.
- Komutu tam yol ile girin: PHP, wget, curl veya shell script yollarını varsayıma bırakmayın.
- 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>&1Bir 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>&1Komutun 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>&1Burada 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>&1WordPress 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>&1Laravel 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>&1Bu 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/*.logCrontab 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>&1Bu ö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/phpyerine sistemde/usr/local/bin/phpkullanılıyor olabilir. - Dosya izni eksik: Shell script çalıştırılabilir değilse
chmod +xgerekebilir. - Çalışma dizini farklı: Script göreli yol kullanıyorsa cron altında dosyaları bulamayabilir.
- Çıktı bastırılmış:
> /dev/null 2>&1tü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>&1Root 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.
- En düşük gerekli sıklığı seçin: Saatlik çalışan bir raporu beş dakikada bir çalıştırmayın.
- Kilit mekanizması kullanın: Uzun süren görevlerde aynı işin ikinci kez başlamasını engelleyin.
- Log rotasyonu planlayın: Cron logları zamanla büyür. Eski kayıtları arşivleyin veya sınırlayın.
- Sırları komuta yazmayın: Parola ve API anahtarlarını crontab içinde açıkça tutmak yerine ortam dosyası kullanın.
- Yetkiyi daraltın: Görev hangi kullanıcıyla çalışıyorsa yalnızca gereken dosyalara erişsin.
- HTTP cron uçlarını koruyun: Rastgele uzun token, IP kısıtı veya uygulama içi imza doğrulaması kullanın.
- 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>&1Bu 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?
Cron job en sık hangi işler için kullanılır?
Her dakika cron job çalıştırmak doğru mu?
Cron job çalışmadığında ilk ne kontrol edilmeli?
Cron çıktısını tamamen kapatmak güvenli mi?
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ı