Tüm barındırma hizmetlerinde 15% tasarruf edin

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın: Skills Başlayın
Bölüm
Linux Yönetim

Cron Scheduler: Linux Sunucularında Görevleri Otomatikleştirmeye Yönelik Tam Kılavuz

Tekrarlayan görevleri otomatikleştirmek, verimli sunucu yönetiminin temel taşlarından biridir. İster küçük bir kişisel web sitesi işletiyor ister bir VPS Hosting planında bir üretim ortamını yönetiyor olun, Linux cron zamanlayıcısı, zamanı tasarruf eden, insan hatasını azaltan ve sistemlerinizi saat gibi çalışan — hatta uyurken bile — vazgeçilmez bir araçtır.

Bu kapsamlı rehber, cron hakkında bilmeniz gereken her şeyi kapsar: temel daemon ve söz dizimini anlamaktan, gerçek dünya kullanım durumlarına, günlüğe kaydetme stratejilerine ve zamanlanmış işlerinizi sürdürülebilir ve güvenli tutmak için en iyi uygulamalara kadar.

Cron Nedir ve Neden Önemlidir?

Cron, Unix benzeri işletim sistemlerine, tüm büyük Linux dağıtımlarına dahil olan zaman tabanlı bir iş planlayıcısıdır. Arka planda bir daemon işlemi (crond) olarak sessizce çalışır ve belirli bir zaman veya aralıkta yürütülmesi gereken görevler için yapılandırma dosyalarını — crontabs olarak bilinir — sürekli olarak kontrol eder.

“Cron” adı, zaman anlamına gelen Yunanca *chronos* (χρόνος) sözcüğünden gelir — ve bu tam olarak cron’un size kontrol etme imkanı verdiği şeydir.

Cron Kullanmanın Temel Faydaları

  • Otomasyon: Tekrarlayan görevleri manuel olarak tetikleme ihtiyacını ortadan kaldırın.
  • Güvenilirlik: İşler, siz oturum açmış olsanız da olmasanız da programa göre çalışır.
  • Esneklik: Görevleri dakika, saat, gün, hafta, ay veya herhangi bir kombinasyonla planlayın.
  • Kaynak verimliliği: Yoğun görevleri (yedekleme veya dizinleme gibi) yoğun olmayan saatlerde çalıştırın.
  • Ölçeklenebilirlik: Tek bir sunucu veya tüm Dedicated Servers filosu arasında düzinelerce otomatik iş akışını yönetin.

Cron Daemon Nasıl Çalışır

Cron daemon (crond) önyükleme sırasında otomatik olarak başlar ve arka planda sürekli çalışır. Her dakika, tüm crontab dosyalarını okur ve herhangi bir zamanlanmış işin geçerli saatla eşleşip eşleşmediğini kontrol eder. Eşleşirse, daemon ilişkili komutu veya betiği yürütür.

Crontab Dosyası Türleri

TürKonumAmaç
Kullanıcı crontabcrontab -e aracılığıyla yönetilirKullanıcı başına zamanlanmış görevler
Sistem crontab/etc/crontabKullanıcı alanı içeren sistem genelinde görevler
Drop-in dizini/etc/cron.d/Uygulamaya özel cron dosyaları
Önceden tanımlanmış zamanlamalar/etc/cron.daily/, /etc/cron.weekly/ vb.Standart aralıklarla çalışan betikler

Bu hiyerarşiyi anlamak önemlidir, özellikle paylaşılan ortamları veya cPanel ile VPS yönetirken, sistem ve kullanıcı düzeyinde cron işleri bir arada bulunabilir.

Crontab’a Erişim ve Düzenleme

Adım 1: Terminalinizi Açın

Linux sunucunuza SSH aracılığıyla bağlanın veya yerel bir terminal oturumu açın.

Adım 2: Crontab Dosyasını Düzenleyin

Geçerli kullanıcı için cron işleri oluşturmak veya değiştirmek için şunu çalıştırın:

crontab -e

Bu, crontab dosyasını sisteminizin varsayılan metin düzenleyicisinde açar (genellikle nano veya vi). İlk kez yapıyorsanız, bir düzenleyici seçmeniz istenebilir.

Belirli bir kullanıcı için crontab’ı düzenlemek için (root ayrıcalıkları gerekir):

crontab -e -u username

Sistem genelinde crontab‘ı doğrudan düzenlemek için:

sudo nano /etc/crontab

Cron İş Sözdizimini Anlamak

Her cron işi, kesin beş alanlı zaman belirtim biçimini ve ardından yürütülecek komutu takip eder:

* * * * * command_to_execute
│ │ │ │ │
│ │ │ │ └── Day of Week  (0–7, Sunday = 0 or 7)
│ │ │ └──── Month        (1–12 or Jan, Feb, ..., Dec)
│ │ └────── Day of Month (1–31)
│ └──────── Hour         (0–23)
└────────── Minute       (0–59)

Alan-Alan Açıklaması

Alanİzin Verilen DeğerlerAçıklama
Dakika0–59İşin çalıştığı dakika
Saat0–23İşin çalıştığı saat (24 saatlik saat)
Ayın Günü1–31Ayın belirli günü
Ay1–12 veya Oca–AraBelirli ay
Haftanın Günü0–7 (0 ve 7 = Pazar)Haftanın belirli günü

Özel Karakterler ve Zaman İfadeleri

Cron, zamanlamayı oldukça esnek hale getiren birkaç özel karakteri destekler:

Yıldız * — Joker Karakter (Tüm Değerler)

O alan için her olası değerle eşleşir.

# Run every minute of every hour, every day
* * * * * /usr/bin/my-script.sh

Virgül , — Değer Listesi

Birden fazla ayrı değer belirtin.

# Run at 1, 15, and 45 minutes past every hour
1,15,45 * * * * /usr/bin/my-script.sh

Tire - — Değer Aralığı

Sürekli bir aralık tanımlayın.

# Run every minute from 9:00 AM to 5:59 PM, Monday to Friday
* 9-17 * * 1-5 /usr/bin/my-script.sh

Eğik Çizgi / — Adım Değerleri (Artışlar)

Bir aralık içinde düzenli aralıklarla çalıştırın.

# Run every 5 minutes
*/5 * * * * /usr/bin/my-script.sh

# Run every 2 hours
0 */2 * * * /usr/bin/my-script.sh

Özel Dizeler — Kısayol Zamanlamalar

Birçok modern cron uygulaması uygun kısayol dizelerini destekler:

DizeEşdeğerAçıklama
@rebootBaşlangıçta bir kez çalıştır
@yearly0 0 1 1 *Yılda bir kez çalıştır
@monthly0 0 1 * *Ayda bir kez çalıştır
@weekly0 0 * * 0Haftada bir kez çalıştır
@daily0 0 * * *Günde bir kez gece yarısında çalıştır
@hourly0 * * * *Saatte bir kez çalıştır

Pratik Cron Job Örnekleri

Veritabanı Yedeklemesi — Her Gece Saat 2:00’de

0 2 * * * /usr/bin/mysqldump -u root -pYourPassword mydb > /backups/mydb_$(date +%F).sql

Uygulama Önbelleğini Temizle — Her 6 Saatte Bir

0 */6 * * * /var/www/html/artisan cache:clear >> /var/log/cache-clear.log 2>&1

Sistem Güncelleme Betiği Çalıştır — Her Pazar Saat 3:30’da

30 3 * * 0 /usr/local/bin/system-update.sh

Haftalık Rapor Gönder — Her Pazartesi Saat 8:00’de

0 8 * * 1 /usr/local/bin/generate-report.sh | mail -s "Weekly Report" admin@yourdomain.com

SSL Sertifikası Sona Erme Tarihini Kontrol Et — Günlük Saat 12:00’de

0 12 * * * /usr/local/bin/check-ssl.sh >> /var/log/ssl-check.log 2>&1

> Pro İpucu: Birden fazla alan adı için SSL Sertifikaları yönetiyorsanız, cron ile yenileme kontrollerini otomatikleştirmek beklenmedik sertifika sona ermelerini önleyen en iyi uygulamadır.

Crontab Editörünü Kaydetme ve Kapatma

Cron işlerinizi ekledikten veya değiştirdikten sonra editörü kaydedin ve kapatın:

Nano’da (Çoğu Sistemde Varsayılan)

  1. CTRL + X tuşuna basın
  2. Kaydetmeyi onaylamak için Y tuşuna basın
  3. Dosyaya yazmak için Enter tuşuna basın

Vi / Vim’de

  1. Insert modundan çıkmak için Esc tuşuna basın
  2. :wq yazın ve Enter tuşuna basın

Kaydettikten sonra, cron güncellenmiş crontab’ı otomatik olarak yükler — hizmet yeniden başlatması gerekli değildir.

Mevcut Cron İşlerini Görüntüleme ve Yönetme

Geçerli Kullanıcı için Tüm Cron İşlerini Listele

crontab -l

Belirli Bir Kullanıcı için Cron İşlerini Listele (Root Gerekli)

crontab -l -u username

Geçerli Kullanıcı için Tüm Cron İşlerini Kaldır

crontab -r

> Uyarı: crontab -r tüm cron işlerini onay olmadan hemen siler. Her zaman crontab’ınızı crontab -l > crontab-backup.txt ile yedekleyin.

Sistem Genelinde Cron İşlerini Görüntüle

cat /etc/crontab
ls /etc/cron.d/
ls /etc/cron.daily/

Cron İş Çıktısını Günlüğe Kaydetme

Varsayılan olarak, cron çıktıyı terminale görüntülemez. Çıktı genellikle yerel sistem kullanıcısına gönderilir veya sessizce atılır. Uygun günlüğe kaydetme, hata ayıklama ve denetim için gereklidir.

Çıktıyı Bir Günlük Dosyasına Yönlendirme

Hem standart çıktıyı (stdout) hem de standart hatayı (stderr) bir günlük dosyasına ekleyin:

0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
  • >> çıktıyı ekler (her seferinde üzerine yazmak için > kullanın)
  • 2>&1 stderr’i stdout ile aynı hedefe yönlendirir

Tüm Çıktıyı Bastırma (Sessiz Mod)

Herhangi bir çıktıya ihtiyacınız yoksa:

0 2 * * * /usr/local/bin/backup.sh > /dev/null 2>&1

Çıktıyı E-posta Yoluyla Gönderme

İş çıktısını e-posta ile almak için crontab’ınızın üst kısmında MAILTO değişkenini ayarlayın:

MAILTO="admin@yourdomain.com"

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

E-posta bildirimlerini tamamen devre dışı bırakmak için MAILTO="" ayarlayın.

Özel Bir Günlük Yönetimi Stratejisi Kullanma

Üretim sunucuları için, cron günlüklerini merkezi bir günlüğe kaydetme sistemiyle (örneğin, rsyslog, journald veya bir günlük toplama platformu) entegre etmeyi düşünün. Cron ile ilgili sistem günlüğü girişlerini şu şekilde görüntüleyebilirsiniz:

grep CRON /var/log/syslog
# or on systemd-based systems:
journalctl -u cron

Crontab’da Ortam Değişkenleri

Cron minimal bir ortamda çalışır — .bashrc veya .bash_profile dosyalarını kaynak olarak almaz. Bu, betiklerin terminalde çalışması ancak cron işleri olarak başarısız olması durumunda yaygın bir karışıklık kaynağıdır.

Ortam değişkenlerini doğrudan crontab’ınızda tanımlayabilirsiniz:

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO="admin@yourdomain.com"
HOME=/root

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

En iyi uygulama: Cron işlerinde PATH ile ilgili hataları önlemek için komutlar ve betikler için her zaman mutlak yollar kullanın.

Cron İşleri için Güvenlik Hususları

Cron Kullanabilecek Kişileri Kontrol Edin

  • /etc/cron.allow — Yalnızca burada listelenen kullanıcılar cron kullanabilir.
  • /etc/cron.deny — Burada listelenen kullanıcılar cron kullanmaktan engellenir.

Eğer cron.allow varsa, yalnızca listelenen kullanıcılara izin verilir. Her iki dosya da yoksa, yalnızca root cron kullanabilir (davranış dağıtıma göre değişir).

Cron İşlerinde Hassas Verileri Koruyun

Parolaları veya API anahtarlarını doğrudan crontab girişlerine gömmeyin. Bunun yerine:

  • Kimlik bilgilerini kısıtlı izinlere sahip güvenli bir yapılandırma dosyasında saklayın (chmod 600).
  • Korumalı bir dosyadan yüklenen ortam değişkenlerini kullanın.
  • Uygun olduğunda gizli yönetim araçlarından yararlanın.

Cron İşlerini Düzenli Olarak Denetleyin

Yetkisiz veya unutulmuş cron işleri önemli bir güvenlik riski oluşturabilir. Özellikle paylaşılan barındırma ortamlarında veya yeni takım üyeleri eklendikten sonra tüm kullanıcı ve sistem crontab’larını düzenli olarak denetleyin.

Yaygın Gerçek Dünya Kullanım Durumları

Kullanım DurumuÖrnek Görev
Veritabanı YedeklemeleriGecelik mysqldump veya pg_dump dışa aktarımları
Dosya YedeklemeleriRsync veya tar arşivleri uzak depolamaya
Günlük DöndürmeEski günlük dosyalarını sıkıştırma ve arşivleme
Önbellek TemizlemeUygulama veya CDN önbelleğini zamanlamaya göre temizleme
Sistem GüncellemeleriBakım pencereleri sırasında apt update && apt upgrade çalıştırma
Sistem Durumu İzlemeHizmetleri ping atma ve arıza durumunda uyarı verme
Rapor OluşturmaGünlük/haftalık analitiği derle ve e-posta ile gönder
SSL YenilemeCertbot veya ACME istemci yenileme kontrollerini tetikleme
Veri SenkronizasyonuDosyaları sunucular veya bulut depolaması arasında senkronize etme
Temizlik GörevleriGeçici dosyaları, süresi dolmuş oturumları veya eski kayıtları silme

Bu kullanım durumları, temel bir Paylaşımlı Web Hosting planında olsanız veya VPS Kontrol Panelleri ile yüksek performanslı bir altyapıyı yönetiyor olsanız eşit şekilde geçerlidir.

Yaygın Cron Sorunlarını Giderme

Cron İşi Çalışmıyor mu?

Bu kontrol listesini takip edin:

  1. Cron daemon çalışıyor mu?
   systemctl status cron
   # or
   systemctl status crond
  1. Sözdizimi doğru mu? Çevrimiçi bir cron ifadesi doğrulayıcı kullanın veya önce echo "test" gibi basit bir komutla test edin.
  1. Mutlak yollar kullanıyor musunuz? python yerine /usr/bin/python3 vb. kullanın.
  1. Betiğin yürütme izinleri var mı?
   chmod +x /path/to/your-script.sh
  1. Günlükleri kontrol edin:
   grep CRON /var/log/syslog | tail -50
  1. Ortam doğru mu? Cron ortamını incelemek için env > /tmp/cron-env.log öğesini geçici bir cron işi olarak ekleyin.
  1. Betik manuel olarak çalışıyor mu? Betik hatalarını ortadan kaldırmak için doğrudan terminalden çalıştırın.

Cron vs. Alternatifleri: Ne Zaman Neyi Kullanmalı

AraçEn İyi Kullanım Alanı
CronTek sunucuda basit, zamana dayalı yinelenen görevler
Systemd TimersDaha iyi günlüğe kaydetme ve bağımlılık yönetimi ile modern alternatif
AnacronHer zaman açık olmayan sistemler (önyüklemeden sonra kaçırılan işleri çalıştırır)
Task queues (Celery, etc.)Karmaşık, dağıtılmış veya olay tabanlı iş planlama
CI/CD pipelinesZamanlanmış derlemeler, testler ve dağıtımlar

Çoğu Linux sunucusu otomasyon ihtiyacı için cron, basitliği, evrensel kullanılabilirliği ve sıfır bağımlılığı nedeniyle tercih edilen çözüm olmaya devam etmektedir.

Sonuç

Linux cron scheduler, sistem yöneticisinin araç setindeki en güçlü ve zaman içinde kanıtlanmış araçlardan biridir. Cron sözdiziminde ustalaşarak, crontab hiyerarşisini anlayarak, uygun günlüğü uygulayarak ve güvenlik en iyi uygulamalarını takip ederek, neredeyse her tekrarlayan görevi otomatikleştirebilir — zamanınızı daha yüksek değerli işler için serbest bırakabilir ve sunucunuzun güvenilir bir şekilde 7/24 çalışmasını sağlayabilirsiniz.

Gece veritabanı yedeklemeleri planlıyor, SSL yenileme kontrollerini otomatikleştiriyor veya yoğun olmayan saatlerde bakım betikleri çalıştırıyor olsanız da, cron modern sunucu yönetiminin talep ettiği kesinlik ve güvenilirliği sunar.

Bu becerilerinizi uygulamaya koymak için güçlü bir barındırma ortamı arıyorsanız, AlexHost’un VPS Hosting planlarını keşfedin — performans, güvenilirlik ve tam root erişimi için tasarlanmış, böylece cron konfigürasyonunuz ve sunucu otomasyon iş akışlarınız üzerinde tam kontrole sahip olursunuz.

*Otomatikleştirilmiş iş akışlarınız için güçlü bir sunucu ortamına mı ihtiyacınız var? AlexHost, güvenilirliği talep eden geliştiriciler ve sistem yöneticileri için tasarlanmış esnek VPS Hosting, Dedicated Servers ve Shared Web Hosting çözümleri sunmaktadır.*