15%

Tüm Hosting Hizmetlerinde %15 indirim

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

Kodu kullanın:

Skills
Başlayın
01.11.2024

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 yönetiyor ister VPS Hosting planında bir üretim ortamı yönetiyor olun, Linux cron zamanlayıcısı, zaman kazandıran, insan hatasını azaltan ve sistemlerinizi saat gibi çalıştıran — 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 yerleşik olan zaman tabanlı bir iş zamanlayıcısıdır. Arka planda bir daemon işlemi (crond) olarak sessizce çalışır ve belirli bir zamanda veya aralıkta yürütülmesi gereken görevler için crontab olarak bilinen yapılandırma dosyalarını sürekli olarak kontrol eder.

“Cron” adı, zaman anlamına gelen Yunanca “chronos” (χρόνος) kelimesinden gelir — ve bu tam olarak cron’un size verdiği kontroldür.

Cron Kullanmanın Temel Faydaları

  • Otomasyon: Tekrarlayan görevleri manuel olarak tetikleme ihtiyacını ortadan kaldırın.
  • Güvenilirlik: İşler, oturum açmış olup olmadığınız fark etmeksizin zamanında çalışır.
  • Esneklik: Görevleri dakika, saat, gün, hafta, ay veya herhangi bir kombinasyonda zamanlayı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 zamanlanmış herhangi bir işin geçerli saate uyup uymadığını kontrol eder. Uyuyorsa, 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ı ile sistem genelinde görevler
Drop-in dizini/etc/cron.d/Uygulamaya özgü cron dosyaları
Önceden tanımlanmış zamanlamalar/etc/cron.daily/, /etc/cron.weekly/ vb.Standart aralıklarda ç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şme ve Düzenleme

Adım 1: Terminal’inizi Açın

SSH aracılığıyla Linux sunucunuza 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 editöründe açar (genellikle nano veya vi). Bu ilk kez ise, bir editör seçmeniz istenebilir.

Belirli bir kullanıcının crontab’ını 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 İşi Söz Dizimini Anlama

Her cron işi, yürütülecek komutun ardından gelen katı bir beş alan zaman belirtimi biçimini izler:

* * * * * 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 Analizi

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)

Bu 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ğeriAçı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 * * *Gece yarısında günde bir kez çalıştır
@hourly0 * * * *Saatte bir kez çalıştır

Pratik Cron İşi Ö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ğini Ç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ı Süresini Kontrol Et — Günlük Öğlen

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

> Pro İpucu: Birden fazla etki alanı için SSL Sertifikaları yönetiyorsanız, cron ile yenileme kontrollerini otomatikleştirmek, beklenmedik sertifika süresi dolmalarını önleyen en iyi bir 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. Ekleme modundan çıkmak için Esc tuşuna basın
  2. :wq yazın ve Enter tuşuna basın

Kaydettikten sonra, cron güncellenen crontab’ı otomatik olarak yükler — hizmet yeniden başlatması gerekmez.

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

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

crontab -l

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

crontab -l -u username

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

crontab -r

> Uyarı: crontab -r tüm cron işlerini onay olmaksızın hemen siler. Önce 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 İşi Çıktısını Günlüğe Kaydetme

Varsayılan olarak, cron terminale çıktı göstermez. Çı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önlendir

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ır (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önder

İş çı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önetim Stratejisi Kullanın

Üretim sunucuları için, cron günlüklerini merkezi bir günlüğe kaydetme sistemi (örneğin rsyslog, journald veya bir günlük toplama platformu) ile 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 komutlar ve betikler için her zaman mutlak yollar kullanın, PATH ile ilgili hataları önlemek için.

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

Cron’u Kimler Kullanabilir Kontrol Edin

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

cron.allow varsa, yalnızca listelenen kullanıcılara izin verilir. Her iki dosya da yoksa, yalnızca root cron’u 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 (chmod 600) depolayın.
  • 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 unutul

15%

Tüm Hosting Hizmetlerinde %15 indirim

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

Kodu kullanın:

Skills
Başlayın