Makale Başlıkları
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,@rebootgibi 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.
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>&1ekleyebilirsiniz. - 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.shkomutu, önceki çalışma bitmeden yenisini başlatmaz. crontab -rtüm görevleri siler; yanlışlıkla çalıştırmamak içincrontab -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 phpile doğru yolu bulun, komutu o yolla yazın. - Script çalıştırılabilir mi?
chmod +x /yol/gorev.shve dosyanın başında#!/bin/bashsatırı olmalı. - Cron servisi açık mı?
systemctl status crond(RHEL/AlmaLinux) ya dasystemctl status cron(Debian/Ubuntu) ile kontrol edin. - Loglara bakın.
grep CRON /var/log/syslogveya/var/log/crondosyası, 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.





