Linux Crontab Nedir? Zamanlanmış Görev Nasıl Oluşturulur? (2026)

Linux sunucularda bazı işlemleri her gün, her hafta veya belirli saatlerde otomatik olarak gerçekleştirmek isteyebilirsiniz. Veritabanı yedeklemek, geçici dosyaları temizlemek, sistem raporu oluşturmak veya belirli bir komutu düzenli aralıklarla çalıştırmak bu işlemlerden bazılarıdır.

Bu tür görevleri manuel olarak takip etmek yerine Linux'un yerleşik zamanlama sistemi olan Cron kullanılır. Crontab sayesinde sunucunuzda belirlediğiniz komutları istediğiniz tarih ve saatlerde otomatik olarak çalıştırabilirsiniz.

Bu rehberde Crontab'ın ne olduğunu, nasıl çalıştığını, zamanlanmış görevlerin nasıl oluşturulduğunu ve en sık karşılaşılan Cron hatalarının nasıl çözülebileceğini adım adım ele alacağız.

Crontab Nedir?

Crontab, Linux ve Unix tabanlı işletim sistemlerinde belirli komutların veya betiklerin önceden tanımlanan zamanlarda otomatik olarak çalıştırılmasını sağlayan yapılandırma dosyasıdır.

Cron ise bu görevleri takip eden ve zamanı geldiğinde çalıştıran arka plan servisidir.

Örneğin bir web sitesinin veritabanını her gece saat 02.00'de yedeklemek istediğinizi düşünün. Normal şartlarda bu işlemi her gün kendiniz başlatmanız gerekir. Crontab ile bir kez zamanlama oluşturduğunuzda Linux, belirlediğiniz komutu her gün otomatik olarak çalıştırır.

Crontab ile gerçekleştirilebilecek işlemlerden bazıları şunlardır:

  • Veritabanı ve web sitesi yedeklerini otomatik oluşturmak
  • Geçici dosyaları belirli aralıklarla temizlemek
  • Sistem kaynaklarını düzenli olarak kontrol etmek
  • Uygulama ve servisleri belirli saatlerde çalıştırmak
  • PHP veya Python betiklerini otomatik yürütmek
  • Log dosyalarını arşivlemek
  • Düzenli raporlar oluşturmak

Özellikle VPS ve VDS sunucularda çalışan web uygulamaları için Crontab oldukça kullanışlı bir otomasyon aracıdır.

Cron ve Crontab Arasındaki Fark Nedir?

Cron ve Crontab çoğu zaman birbirinin yerine kullanılsa da aynı şeyi ifade etmez.

  • Cron: Zamanlanmış görevleri takip eden ve zamanı geldiğinde çalıştıran arka plan servisidir.
  • Crontab: Kullanıcıların zamanlanmış görevlerini tanımladığı yapılandırma dosyasıdır.

Kısacası Crontab üzerinden görevleri tanımlarsınız, Cron servisi ise bu görevlerin zamanında çalışmasını sağlar.

Crontab Nasıl Açılır ve Kullanılır?

Linux sunucunuzda zamanlanmış görev oluşturmak için öncelikle SSH üzerinden sunucunuza bağlanmanız gerekir.

SSH bağlantısı hakkında ayrıntılı bilgi için SSH Nedir? Sunucuya SSH ile Nasıl Bağlanılır? rehberimizi inceleyebilirsiniz.

Mevcut kullanıcının Crontab dosyasını açmak için şu komutu çalıştırın:

crontab -e

İlk kullanımda sistem sizden bir metin editörü seçmenizi isteyebilir. Nano veya Vim gibi bir editör seçerek devam edebilirsiniz.

Açılan dosyaya zamanlanmış görevlerinizi ekleyebilirsiniz.

Mevcut Cron görevlerini listelemek için:

crontab -l

Mevcut kullanıcının tüm Cron görevlerini silmek için:

crontab -r

Dikkat: crontab -r komutu kullanıcının tüm zamanlanmış görevlerini siler. Bu işlem geri alınamayabileceği için çalıştırmadan önce mevcut görevlerinizi yedeklemeniz önerilir.

Crontab Zamanlama Sözdizimi Nasıl Çalışır?

Crontab kullanırken en önemli konu zamanlama formatını doğru oluşturmaktır.

Standart bir Cron görevi beş zaman alanından ve çalıştırılacak komuttan oluşur:

* * * * * komut

Alanların sıralaması şu şekildedir:

AlanAnlamıİzin verilen değer1. alanDakika0-592. alanSaat0-233. alanAyın günü1-314. alanAy1-125. alanHaftanın günü0-7Haftanın günü alanında 0 ve 7 Pazar gününü ifade eder. Diğer günler 1 Pazartesi ile 6 Cumartesi arasında sıralanır.

Örneğin:

0 2 * * * /usr/bin/backup.sh

Bu görev her gün saat 02.00'de backup.sh dosyasını çalıştırır.

Crontab zamanlama alanlarında kullanılan temel karakterler:

  • * : İlgili alanın tüm değerlerini ifade eder.
  • , : Birden fazla belirli değer tanımlar.
  • - : Belirli bir aralığı ifade eder.
  • / : Belirli aralıklarla tekrar anlamına gelir.

Örneğin */15 ifadesi her 15 dakikada bir çalıştırma anlamına gelir.

En Çok Kullanılan Crontab Örnekleri

Crontab öğrenirken farklı zamanlama örneklerini incelemek oldukça faydalıdır.

Her dakika görev çalıştırma

* * * * * /usr/bin/php /var/www/html/script.php

Belirtilen PHP dosyası her dakika çalıştırılır.

Her 5 dakikada bir çalıştırma

*/5 * * * * /usr/bin/php /var/www/html/script.php

Bu görev her 5 dakikada bir tetiklenir.

Her saat başı çalıştırma

0 * * * * /usr/bin/php /var/www/html/script.php

Komut her saatin ilk dakikasında çalışır.

Her gün saat 03.00'te çalıştırma

0 3 * * * /usr/bin/backup.sh

Yedekleme betiği her gün saat 03.00'te çalıştırılır.

Her pazar günü çalıştırma

0 4 * * 0 /usr/bin/weekly-report.sh

Bu görev her pazar saat 04.00'te çalışır.

Her ayın ilk günü çalıştırma

0 1 1 * * /usr/bin/monthly-report.sh

Komut her ayın ilk günü saat 01.00'de çalışır.

Hafta içi her gün çalıştırma

0 9 * * 1-5 /usr/bin/daily-task.sh

Bu görev pazartesiden cumaya her gün saat 09.00'da çalıştırılır.

Linux Sunucuda Otomatik Yedekleme Crontab ile Nasıl Yapılır?

Crontab'ın en yaygın kullanım alanlarından biri otomatik yedekleme işlemleridir.

Örneğin MySQL veritabanınızı her gece saat 02.00'de yedeklemek istediğinizi varsayalım.

Öncelikle yedeklerin saklanacağı dizini oluşturun:

sudo mkdir -p /backup

Ardından Crontab dosyanızı açın:

crontab -e

Aşağıdaki görevi ekleyin:

0 2 * * * /usr/bin/mysqldump -u db_user -p'VERITABANI_SIFRESI' db_name > /backup/database_$(date +\%Y\%m\%d).sql

Bu komut her gece saat 02.00'de veritabanı yedeği oluşturur. Dosya adına tarih bilgisi de eklenir.

Ancak bu örnekteki gibi veritabanı şifresini doğrudan Crontab satırına yazmak güvenli değildir. Üretim ortamında erişimi sınırlandırılmış bir MySQL yapılandırma dosyası veya uygun bir kimlik doğrulama yöntemi kullanmanız daha doğru olacaktır.

Ayrıca yedekleme işleminin gerçekten başarılı olduğunu kontrol etmek, yedekleri farklı bir konumda saklamak ve belirli aralıklarla geri yükleme testi yapmak gerekir.

Web sitesi yedekleme yöntemleri hakkında daha kapsamlı bilgi için Web Sitesi Yedekleme Nasıl Yapılır? yazımızı da inceleyebilirsiniz.

Crontab Görevlerinin Çıktısı Nasıl Kaydedilir?

Zamanlanmış görevler arka planda çalıştığı için oluşan hataları fark etmek her zaman kolay olmayabilir.

Bu nedenle Cron görevlerinin çıktısını bir log dosyasına yönlendirmek oldukça faydalıdır.

Örneğin:

*/10 * * * * /usr/bin/php /var/www/html/script.php >> /var/log/script.log 2>&1

Bu komut her 10 dakikada bir PHP dosyasını çalıştırır ve hem standart çıktıyı hem de hata mesajlarını script.log dosyasına kaydeder.

Burada kullanılan ifadelerin anlamları:

  • >> : Çıktıyı dosyanın sonuna ekler.
  • 2>&1 : Hata çıktısını da standart çıktı ile aynı yere yönlendirir.
  • > : Dosyanın mevcut içeriğini silerek yeni çıktı yazar.

Log dosyasını canlı olarak takip etmek için:

tail -f /var/log/script.log

Böylece görevlerin çalışıp çalışmadığını ve hata üretip üretmediğini kontrol edebilirsiniz.

Crontab Görevleri Neden Çalışmaz?

Crontab yapılandırması doğru görünmesine rağmen görevleriniz çalışmıyorsa bunun birkaç farklı nedeni olabilir.

1. Cron Servisi Çalışmıyor Olabilir

Öncelikle Cron servisinin durumunu kontrol edin.

Ubuntu ve Debian sistemlerinde:

sudo systemctl status cron

AlmaLinux ve Rocky Linux gibi dağıtımlarda:

sudo systemctl status crond

Servis çalışmıyorsa etkinleştirmek ve başlatmak için Ubuntu ve Debian:

sudo systemctl enable --now cron

AlmaLinux ve Rocky Linux:

sudo systemctl enable --now crond

2. Komutun Dosya Yolu Yanlış Olabilir

Cron görevleri çalışırken etkileşimli terminaldeki ortam değişkenlerinin tamamına sahip olmayabilir.

Bu nedenle komutları mümkün olduğunca tam dosya yolu ile tanımlayın.

Örneğin:

php script.php

yerine:

/usr/bin/php /var/www/html/script.php

kullanmak daha güvenlidir.

PHP'nin sunucunuzdaki konumunu öğrenmek için:

which php

komutunu çalıştırabilirsiniz.

3. Dosya İzinleri Yetersiz Olabilir

Cron görevinin çalıştığı kullanıcı, ilgili dosyayı çalıştırma veya dizine erişme yetkisine sahip olmalıdır.

Dosya izinlerini kontrol etmek için:

ls -l /var/www/html/script.php

Bir betiğin çalıştırılabilir olması gerekiyorsa uygun izinleri şu şekilde verebilirsiniz:

chmod +x /var/www/html/script.sh

Gereksiz yere herkese yazma izni vermekten kaçının.

4. Zaman Dilimi Yanlış Olabilir

Cron görevleri sunucunun sistem saatini ve zaman dilimi ayarını esas alır.

Sunucunun mevcut saatini kontrol etmek için:

date

Zaman dilimini görüntülemek için:

timedatectl

Türkiye saatine göre çalışmasını istediğiniz görevlerde sunucunun zaman diliminin doğru yapılandırıldığından emin olun.

Örneğin:

sudo timedatectl set-timezone Europe/Istanbul

Bu ayar sunucunun sistem zaman dilimini değiştirir. Aynı sunucuda çalışan diğer uygulamaların saat davranışını da etkileyebileceği için dikkatli kullanılmalıdır.

5. Cron Görevinde Yüzde (%) Karakteri Sorun Oluşturabilir

Crontab içinde % karakteri özel bir anlama sahiptir. Komut satırında kaçırılmadan kullanıldığında Cron tarafından satır sonu gibi değerlendirilebilir.

Örneğin tarih formatı içeren bir yedekleme komutunda:

date +%Y%m%d

yerine:

date +\%Y\%m\%d

kullanılmalıdır.

Bu ayrıntı özellikle tarih bilgisi içeren otomatik yedekleme komutlarında sık karşılaşılan sorunlardan biridir.

Crontab Güvenliği İçin Nelere Dikkat Edilmelidir?

Zamanlanmış görevler sunucuda otomatik olarak komut çalıştırdığı için güvenlik açısından da dikkatli yapılandırılmalıdır.

Aşağıdaki önerileri uygulamanız faydalı olacaktır:

  • Gereksiz görevler oluşturmayın ve kullanılmayan Cron kayıtlarını temizleyin.
  • Her görevi mümkünse root yerine gerekli yetkilere sahip ayrı bir kullanıcıyla çalıştırın.
  • Betiklerin ve yapılandırma dosyalarının izinlerini kontrol edin.
  • Şifreleri doğrudan Crontab satırlarına yazmayın.
  • Görev çıktısını log dosyalarına yönlendirerek düzenli kontrol edin.
  • İnternetten indirdiğiniz ve içeriğini incelemediğiniz betikleri otomatik çalıştırmayın.
  • Yedekleme görevlerinin başarılı olduğunu düzenli olarak doğrulayın.

Özellikle birden fazla uygulamanın çalıştığı VPS ve VDS sunucularda kullanıcı yetkilerinin doğru ayrılması önemlidir.

Sunucu güvenliğini daha kapsamlı ele almak için Sunucu Güvenliği Nasıl Sağlanır? 10 Kritik Önlem rehberimizi inceleyebilirsiniz.

Crontab Kullanırken Bilmeniz Gereken Ek Komutlar

Crontab yönetimini kolaylaştıran bazı ek komutlar da bulunmaktadır.

KomutAçıklamacrontab -eGörevleri düzenlercrontab -lMevcut görevleri listelercrontab -rMevcut görevleri silercrontab -u kullanıcı -eBaşka bir kullanıcının görevlerini düzenlersystemctl status cronCron servisinin durumunu kontrol edersystemctl status crondcrond servisinin durumunu kontrol ederSisteminizin dağıtımına göre Cron servisinin adı cron veya crond olabilir.

Sıkça Sorulan Sorular

Crontab ücretsiz midir?

Evet. Cron ve Crontab Linux sistemlerinde kullanılabilen ücretsiz ve açık kaynaklı zamanlama araçlarıdır. Ek bir lisans veya ücret gerektirmez.

Crontab olmadan otomatik görev oluşturulabilir mi?

Evet. Systemd timer gibi alternatif mekanizmalar da kullanılabilir. Ancak Cron, basit ve düzenli zamanlanmış görevler için oldukça yaygın bir çözümdür.

Crontab her dakika çalıştırılabilir mi?

Evet. Zamanlama alanlarına * * * * * yazıldığında görev her dakika tetiklenir. Ancak sunucu kaynaklarını gereksiz tüketmemek için görev sıklığı ihtiyaca göre belirlenmelidir.

Crontab görevleri sunucu yeniden başlatıldığında silinir mi?

Hayır. Kullanıcıların Crontab kayıtları normal koşullarda sunucu yeniden başlatıldığında korunur. Cron servisi tekrar çalışmaya başladığında zamanlanmış görevler de çalışmaya devam eder.

Root kullanıcısının Crontab dosyası nasıl düzenlenir?

Root kullanıcısının görevlerini düzenlemek için şu komut kullanılabilir:

sudo crontab -e

Mevcut root görevlerini görüntülemek için:

sudo crontab -l

Crontab ile PHP dosyası çalıştırılabilir mi?

Evet. PHP'nin tam dosya yolu belirtilerek herhangi bir PHP betiği zamanlanmış görev olarak çalıştırılabilir:

/usr/bin/php /var/www/html/task.php

Aynı anda birden fazla Cron görevi çalışabilir mi?

Evet. Crontab dosyasına birden fazla görev eklenebilir. Ancak aynı anda çalışan görevlerin CPU, RAM ve disk kullanımı gibi sunucu kaynaklarına etkisi göz önünde bulundurulmalıdır.

Sonuç: Linux Sunucularda Otomasyonu Crontab ile Kolaylaştırın

Crontab, Linux sunucularda tekrarlanan işlemleri otomatikleştirmenin en pratik yollarından biridir. Düzenli yedekleme, log temizleme, uygulama görevleri ve sistem kontrolleri gibi işlemleri önceden planlayarak hem zamandan tasarruf edebilir hem de sunucu yönetimini kolaylaştırabilirsiniz.

Özellikle düzenli olarak çalışan web uygulamalarında ve yüksek kaynak gerektiren projelerde zamanlanmış görevlerin doğru yapılandırılması büyük önem taşır.

Bu tür otomasyonları sorunsuz şekilde çalıştırabilmek için yeterli işlemci, RAM ve disk kaynağına sahip bir sunucu altyapısı tercih etmelisiniz.

TuemCloud sanal sunucu çözümleriyle projelerinize uygun kaynakları seçebilir, Linux tabanlı sunucunuz üzerinde Cron ve Crontab gibi araçlarla kendi otomasyon sisteminizi oluşturabilirsiniz.