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ür | Konum | Amaç |
|---|---|---|
| Kullanıcı crontab | crontab -e aracılığıyla yönetilir | Kullanıcı başına zamanlanmış görevler |
| Sistem crontab | /etc/crontab | Kullanı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 -eBu, 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 usernameSistem genelinde crontab‘ı doğrudan düzenlemek için:
sudo nano /etc/crontabCron İş 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ğerler | Açıklama |
|---|---|---|
| Dakika | 0–59 | İşin çalıştığı dakika |
| Saat | 0–23 | İşin çalıştığı saat (24 saatlik saat) |
| Ayın Günü | 1–31 | Ayın belirli günü |
| Ay | 1–12 veya Oca–Ara | Belirli 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.shVirgü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.shTire - — 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.shEğ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:
| Dize | Eşdeğer | Açıklama |
|---|---|---|
@reboot | — | Başlangıçta bir kez çalıştır |
@yearly | 0 0 1 1 * | Yılda bir kez çalıştır |
@monthly | 0 0 1 * * | Ayda bir kez çalıştır |
@weekly | 0 0 * * 0 | Haftada bir kez çalıştır |
@daily | 0 0 * * * | Günde bir kez gece yarısında çalıştır |
@hourly | 0 * * * * | 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).sqlUygulama Önbelleğini Temizle — Her 6 Saatte Bir
0 */6 * * * /var/www/html/artisan cache:clear >> /var/log/cache-clear.log 2>&1Sistem Güncelleme Betiği Çalıştır — Her Pazar Saat 3:30’da
30 3 * * 0 /usr/local/bin/system-update.shHaftalı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.comSSL 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)
CTRL + Xtuşuna basın- Kaydetmeyi onaylamak için
Ytuşuna basın - Dosyaya yazmak için
Entertuşuna basın
Vi / Vim’de
- Insert modundan çıkmak için
Esctuşuna basın :wqyazın veEntertuş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 -lBelirli Bir Kullanıcı için Cron İşlerini Listele (Root Gerekli)
crontab -l -u usernameGeç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>&1stderr’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.shE-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 cronCrontab’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.shEn 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ı Yedeklemeleri | Gecelik mysqldump veya pg_dump dışa aktarımları |
| Dosya Yedeklemeleri | Rsync veya tar arşivleri uzak depolamaya |
| Günlük Döndürme | Eski günlük dosyalarını sıkıştırma ve arşivleme |
| Önbellek Temizleme | Uygulama veya CDN önbelleğini zamanlamaya göre temizleme |
| Sistem Güncellemeleri | Bakım pencereleri sırasında apt update && apt upgrade çalıştırma |
| Sistem Durumu İzleme | Hizmetleri ping atma ve arıza durumunda uyarı verme |
| Rapor Oluşturma | Günlük/haftalık analitiği derle ve e-posta ile gönder |
| SSL Yenileme | Certbot veya ACME istemci yenileme kontrollerini tetikleme |
| Veri Senkronizasyonu | Dosyaları sunucular veya bulut depolaması arasında senkronize etme |
| Temizlik Görevleri | Geç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:
- Cron daemon çalışıyor mu?
systemctl status cron
# or
systemctl status crond- 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.
- Mutlak yollar kullanıyor musunuz?
pythonyerine/usr/bin/python3vb. kullanın.
- Betiğin yürütme izinleri var mı?
chmod +x /path/to/your-script.sh- Günlükleri kontrol edin:
grep CRON /var/log/syslog | tail -50- Ortam doğru mu? Cron ortamını incelemek için
env > /tmp/cron-env.logöğesini geçici bir cron işi olarak ekleyin.
- 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ı |
|---|---|
| Cron | Tek sunucuda basit, zamana dayalı yinelenen görevler |
| Systemd Timers | Daha iyi günlüğe kaydetme ve bağımlılık yönetimi ile modern alternatif |
| Anacron | Her 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 pipelines | Zamanlanmış 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.*
tasarruf edin