Cron Job (crontab) Nasıl Oluşturulur?

Cron Job (crontab) Nasıl Oluşturulur?

Kısaca

Cron, Linux’ta komutları ve scriptleri belirli zamanlarda otomatik çalıştıran zamanlayıcıdır. Her görev beş zaman alanı ve bir komuttan oluşur; crontab -e ile düzenler, crontab -l ile listelersiniz. cPanel kullanıyorsanız aynı işi arayüzden birkaç tıklamayla yapabilirsiniz.

  • Sözdizimi: dakika saat ayıngünü ay haftanıngünü komut (5 alan + komut)
  • En sık hatalar: göreli yol ve eksik PATH; her zaman mutlak yol kullanın ve çıktıyı log’a yönlendirin
  • @daily, @hourly, @reboot gibi kısayollar okunabilirliği artırır

Cron, Linux sistemlerinde komutları veya scriptleri belirli zamanlarda otomatik çalıştıran bir zamanlayıcıdır. “Her gece 03:00’te yedek al”, “her 15 dakikada bir kontrol et” gibi tekrar eden görevleri otomatikleştirmek için kullanılır. Her kullanıcının kendi görev listesi (crontab) vardır. Bu rehberde cron job’ların nasıl oluşturulacağını, crontab sözdizimini, hem komut satırında hem cPanel arayüzünde adımları, gerçek hayattan örnekleri ve en sık karşılaşılan hataların çözümlerini anlatıyoruz.

Zamanlanmış görevleri sınırsızca çalıştırmak için root veya kullanıcı erişiminiz olan bir VPS/sunucu idealdir. Paylaşımlı ortamlarda ise crontab’ı genellikle hosting kontrol panelindeki Cron Jobs aracılığıyla yönetirsiniz.

Cron Nedir, Nasıl Çalışır?

Cron, arka planda sürekli çalışan bir servistir (cron daemon). Her dakika başında crontab dosyalarını okur ve o ana uyan satırları tetikler. Komut, crontab’ı oluşturan kullanıcının yetkileriyle çalışır. Yani root crontab’ı sistem genelinde, normal bir kullanıcının crontab’ı ise yalnızca o kullanıcının erişebildiği kaynaklar üzerinde iş görür.

Cron sistemi üç ana parçadan oluşur: kullanıcı crontab’ları (crontab -e ile yönetilir), sistem genelindeki /etc/crontab dosyası ve /etc/cron.d/ ile /etc/cron.daily, /etc/cron.hourly gibi dizinler. Günlük pratikte en çok kullanıcı crontab’ını kullanırsınız.

Mail hosting 1 ay ücretsiz

Crontab Sözdizimi

Bir cron satırı beş zaman alanı ve bir komuttan oluşur:

* * * * * komut
| | | | |
| | | | +-- haftanin gunu (0-7; 0 ve 7 = Pazar)
| | | +---- ay (1-12)
| | +------ ayin gunu (1-31)
| +-------- saat (0-23)
+---------- dakika (0-59)

Özel karakterler: * (her değer), , (liste: 0,30), - (aralık: 1-5), / (adım: */5 her 5 birimde bir). Bu karakterleri birleştirebilirsiniz; örneğin 0,30 9-17 * * 1-5 ifadesi “hafta içi, mesai saatlerinde her yarım saatte bir” demektir.

Zaman Alanlarının Anlamı

Alan İzinli Değer Açıklama
Dakika 0-59 Saatin hangi dakikası
Saat 0-23 24 saat formatı (00-23)
Ayın günü 1-31 Ayın kaçıncı günü
Ay 1-12 1 = Ocak, 12 = Aralık
Haftanın günü 0-7 0 ve 7 = Pazar, 1 = Pazartesi

Cron Görevi Oluşturma (Komut Satırı)

crontab -e     # crontab duzenle (gorev ekle)
crontab -l     # mevcut gorevleri listele
crontab -r     # tum crontab i sil (dikkat!)

crontab -e komutu varsayılan metin editörünü açar. Yeni satırınızı ekleyin, kaydedip çıkın; cron, değişikliği anında devreye alır. Bir başka kullanıcının crontab’ını düzenlemek için (root iken) crontab -u kullaniciadi -e yazabilirsiniz.

cPanel ile Cron Job Oluşturma

Paylaşımlı hosting kullanıyorsanız komut satırına hiç dokunmadan, cPanel arayüzünden cron job ekleyebilirsiniz. Adımlar sade:

  • cPanel ana ekranında Gelişmiş (Advanced) bölümünden Cron Jobs simgesine tıklayın.
  • Çıktı bildirimi istiyorsanız üst kısma bir e-posta adresi girin; cron’un ürettiği çıktı ve hatalar bu adrese gelir.
  • Common Settings menüsünden hazır bir zamanlama seçin (örn. “Once Per Day”) veya alanları elle doldurun.
  • Command alanına çalıştırılacak komutu mutlak yolla yazın, örn: /usr/local/bin/php -q /home/KULLANICI/public_html/gorev.php
  • Add New Cron Job düğmesiyle kaydedin.

cPanel’in Common Settings menüsü @hourly, @daily, @weekly, @monthly gibi kısayolların görsel karşılığıdır; perde arkasında aynı cron sözdizimini üretir.

Örnek Cron Görevleri

# Her gun saat 03:00 te yedek al
0 3 * * * /usr/local/bin/yedek.sh

# Her 15 dakikada bir kontrol
*/15 * * * * /usr/local/bin/kontrol.sh

# Her Pazartesi 06:30 da
30 6 * * 1 /usr/local/bin/haftalik.sh

# Hafta ici mesai saatlerinde her yarim saatte
0,30 9-17 * * 1-5 /usr/local/bin/rapor.sh

# Ayin ilk gunu 00:05 te
5 0 1 * * /usr/local/bin/aylik.sh

# Bir PHP scriptini her gun calistir (cPanel tipik)
0 2 * * * /usr/local/bin/php -q /home/KULLANICI/public_html/gorev.php

# Kisayol ile gunluk
@daily /usr/local/bin/yedek.sh

Sık Kullanılan Zamanlama Örnekleri

İfade Anlamı
* * * * * Her dakika
*/5 * * * * Her 5 dakikada bir
0 * * * * Her saat başı
0 0 * * * Her gün gece yarısı
0 9 * * 1 Her Pazartesi 09:00
0 0 1 * * Her ayın ilk günü
0 0 1 1 * Her yıl 1 Ocak

Özel Kısayol Dizeleri (@daily, @reboot)

Beş alanı yazmak yerine, çoğu cron uygulaması okunması kolay kısayollar sunar. Bunlar hem yazması hızlı hem de niyetinizi açıkça belli eder.

Kısayol Karşılığı Ne zaman
@yearly / @annually 0 0 1 1 * Yılda bir, 1 Ocak
@monthly 0 0 1 * * Ayın ilk günü
@weekly 0 0 * * 0 Pazar gece yarısı
@daily / @midnight 0 0 * * * Her gece yarısı
@hourly 0 * * * * Her saat başı
@reboot Sistem her açıldığında bir kez

Not: @reboot tüm cron uygulamalarında bulunmaz; minimal sistemlerde desteklenmeyebilir. Kullanmadan önce sunucunuzun cron sürümünü kontrol etmek iyi olur.

Dikkat Edilmesi Gerekenler

  • Cron sınırlı bir ortamda (minimal PATH) çalışır; komutlarda tam (mutlak) yol kullanın (örn. /usr/bin/php). Bu, “terminalde çalışıyor ama cron’da çalışmıyor” sorununun bir numaralı sebebidir.
  • Çıktı ve hataları görmek için yönlendirin: 0 3 * * * /yol/yedek.sh >> /var/log/yedek.log 2>&1; aksi halde hatalar sessizce kaybolur. Hiçbir çıktı istemiyorsanız > /dev/null 2>&1 ekleyebilirsiniz.
  • Komutta % kullanacaksanız % ile kaçırın; cron’da % özel bir karakterdir (satır sonu/girdi anlamına gelir).
  • Saat dilimine dikkat edin. Cron, sunucunun yerel saatine göre çalışır; sunucu UTC ise yazdığınız saatler de UTC olur. Gerekirse zaman dilimini netleştirin.
  • Uzun süren görevlerin üst üste binmemesi için bir kilit mekanizması kullanın: flock -n /tmp/gorev.lock /yol/gorev.sh komutu, önceki çalışma bitmeden yenisini başlatmaz.
  • crontab -r tüm görevleri siler; yanlışlıkla çalıştırmamak için crontab -l çıktınızı zaman zaman yedekleyin.

WP-Cron ile Sistem Cron Farkı

WordPress’in kendi zamanlayıcısı (WP-Cron) gerçek bir cron değildir; yalnızca bir ziyaretçi siteyi açtığında tetiklenir. Trafiğin az olduğu sitelerde görevler gecikebilir, trafiğin yoğun olduğu sitelerde ise her istekte çalışıp gereksiz yük oluşturabilir. Daha güvenilir bir çözüm, WP-Cron’u devre dışı bırakıp aynı işi sistem cron’una vermektir:

# wp-config.php icine:
define('DISABLE_WP_CRON', true);

# crontab'a (her 5 dakikada bir):
*/5 * * * * /usr/local/bin/php /home/KULLANICI/public_html/wp-cron.php >/dev/null 2>&1

Bu yöntem özellikle yoğun bir WordPress hosting kurulumunda zamanlamayı trafikten bağımsız, öngörülebilir hale getirir.

Cron mu, systemd Timer mi?

systemd kullanan modern dağıtımlarda (AlmaLinux, Debian, Ubuntu vb.) cron’a alternatif olarak systemd timer‘ları da vardır. Hangisinin daha uygun olduğu ihtiyaca göre değişir:

Özellik Cron systemd Timer
Kurulum kolaylığı Çok kolay, tek satır İki dosya (.timer + .service)
Loglama E-posta veya elle yönlendirme journalctl’e otomatik
Kaçırılan çalışma Sistem kapalıysa atlanır Persistent ile telafi edilir
Bağımlılık yönetimi Yok (sleep/retry yazarsınız) Servis/ağ bekleme yerleşik
Yaygın pratik Çok yaygın, her yerde Servis odaklı kurulumlarda

Pratik tavsiye: Basit zamanlı görevler (günlük yedek, log rotasyonu) için cron fazlasıyla yeterlidir ve hemen herkes bilir. Karmaşık bağımlılıklar, kaçırılan çalışmaların telafisi ve detaylı loglama gerekiyorsa systemd timer daha güçlü bir seçenektir.

Sorun Giderme: Cron Çalışmıyor

  • Tam yol verdiniz mi? which php ile doğru yolu bulun, komutu o yolla yazın.
  • Script çalıştırılabilir mi? chmod +x /yol/gorev.sh ve dosyanın başında #!/bin/bash satırı olmalı.
  • Cron servisi açık mı? systemctl status crond (RHEL/AlmaLinux) ya da systemctl status cron (Debian/Ubuntu) ile kontrol edin.
  • Loglara bakın. grep CRON /var/log/syslog veya /var/log/cron dosyası, görevin tetiklenip tetiklenmediğini gösterir.
  • İfadeyi test edin. Bir cron ifadesinin ne zaman çalışacağından emin değilseniz, bir crontab doğrulayıcıda deneyin.

Sıkça Sorulan Sorular

Cron nedir?

Belirli zamanlarda komut veya script çalıştıran Linux zamanlayıcısıdır. Arka planda sürekli çalışan bir servis her dakika crontab’ları okur ve zamanı gelen görevleri tetikler.

Crontab nasıl düzenlenir?

crontab -e komutu varsayılan editörü açar. Görev satırınızı ekleyip kaydedin; cron değişikliği anında devreye alır. Mevcut görevleri crontab -l ile listeleyebilirsiniz.

Görevim çalışmıyor, neden?

En sık sebep göreli yol veya eksik PATH’tir. Komutta mutlak yol kullanın, scriptin çalıştırılabilir olduğundan emin olun ve çıktıyı bir log’a yönlendirip /var/log/cron dosyasını inceleyin.

Her 5 dakikada bir nasıl ayarlanır?

*/5 * * * * komut ifadesi ile. Buradaki */5, dakika alanında “her 5 dakikada bir” anlamına gelir.

Cron görevi hangi kullanıcıda çalışır?

Crontab’ı düzenleyen kullanıcının yetkileriyle. Root görevi için sudo crontab -e, başka bir kullanıcı için crontab -u kullaniciadi -e kullanılır.

Cron çıktısını ve logları nasıl tutarım?

Komut sonuna >> /var/log/gorev.log 2>&1 ekleyerek hem çıktıyı hem hataları bir dosyaya yazabilirsiniz. cPanel’de ise cron sayfasına bir e-posta adresi girerek çıktıyı posta olarak alabilirsiniz.

cPanel’de cron job nasıl eklenir?

Gelişmiş bölümünden Cron Jobs’a girin, Common Settings’ten bir zamanlama seçin, Command alanına komutu mutlak yolla yazın ve Add New Cron Job ile kaydedin. Arayüz perde arkasında standart cron sözdizimi üretir.

@daily ve @reboot ne işe yarar?

@daily her gece yarısı (0 0 * * *), @reboot ise sistem her açıldığında bir kez çalışır. Bunlar beş alanı yazmaya göre daha okunabilir kısayollardır, ancak @reboot her cron sürümünde bulunmaz.

Cron mu systemd timer mi kullanmalıyım?

Basit, zamana dayalı görevler için cron yeterli ve yaygındır. Kaçırılan çalışmaların telafisi, detaylı loglama veya servis/ağ bağımlılığı gerekiyorsa systemd timer daha güçlü bir seçenektir.

Zamanlanmış Görevler İçin Tam Kontrollü Sunucu

Cron görevleri, yedekler ve otomasyonlarınız için İzmir’deki kendi veri merkezimizde, KVM ve NVMe destekli yüksek performanslı VPS çözümleri. Ücretsiz taşıma, günlük yedek ve 7/24 destek standart gelir.

VPS/Sunucu Çözümleri →

Türkiye'nin En Çok Tavsiye Edilen Domain, Hosting ve Bulut Servis Sağlayıcısı
İnternet sitesi Alastyr İnternet Sitesi
Yazı oluşturuldu 511

Benzer yazılar

Aramak istediğinizi üstte yazmaya başlayın ve aramak için enter tuşuna basın. İptal için ESC tuşuna basın.

Üste dön