format_list_bulletedBu İçerikte Bahsedilen Konular
- arrow_rightCrontab Nedir ve Sunucularda Neden Bu Kadar Önemli?
- arrow_rightCrontab'ın Temel Bileşenleri
- arrow_rightSunucuda Crontab Kurulumu ve Temel Kullanım
- arrow_rightCrontab Komutları
- arrow_rightCrontab Zamanlama Formatları
- arrow_rightSık Kullanılan Zamanlama Örnekleri
- arrow_rightPratik Crontab Kullanım Senaryoları
- arrow_right1. Otomatik Yedekleme Betiği
- arrow_right2. Log Dosyalarını Temizleme
- arrow_right3. Veritabanı Optimizasyonu
- arrow_right4. SSL Sertifikası Yenileme Kontrolü
- arrow_rightSunucularda Crontab Güvenliği
- arrow_rightGüvenlik Önlemleri
- arrow_rightOrtam Değişkeni Sorunları
- arrow_rightSystemd Timer: Crontab'a Modern Alternatif
- arrow_rightCrontab vs Systemd Timer Karşılaştırması
- arrow_rightCrontab Hata Ayıklama ve İzleme
- arrow_rightLog Dosyalarını İzleme
- arrow_rightTest Çalıştırma
- arrow_rightSonuç ve Öneriler
Crontab Nedir ve Sunucularda Neden Bu Kadar Önemli?
Crontab (Cron Table), Unix tabanlı işletim sistemlerinde bulunan ve belirli zamanlarda otomatik olarak komut veya betiklerin çalıştırılmasını sağlayan bir zamanlama sistemidir. Linux sunucu yöneticilerinin %87'si düzenli olarak crontab kullanarak tekrarlayan görevleri otomatikleştirmektedir. Bu sistem, sistem bakımı, yedekleme, log temizleme ve veritabanı optimizasyonu gibi kritik işlerin insan müdahalesi olmadan yapılmasına olanak tanır.
Crontab, cron daemon tarafından çalıştırılır ve sistemin arka planında sürekli olarak çalışarak tanımlanan zamanlama kurallarını kontrol eder. Her dakika çalışan bu daemon, eşleşen bir kural bulduğunda ilgili komutu veya betiği yürütür.
Crontab'ın Temel Bileşenleri
Bir crontab girişi beş zaman alanından oluşur:
- Dakika (0-59): Saat başı hangi dakikada çalışacağını belirler
- Saat (0-23): Günün hangi saatinde çalışacağını belirler
- Gün (1-31): Ayın hangi gününde çalışacağını belirler
- Ay (1-12): Yılın hangi ayında çalışacağını belirler
- Haftanın Günü (0-7): Haftanın hangi günü çalışacağını belirler (0 ve 7 Pazar)
Sunucuda Crontab Kurulumu ve Temel Kullanım
Crontab Komutları
Sunucunuzda crontab kullanmaya başlamak için aşağıdaki temel komutları bilmeniz yeterlidir:
| Komut | Açıklama |
|---|---|
| crontab -e | Crontab dosyasını düzenle |
| crontab -l | Mevcut crontab görevlerini listele |
| crontab -r | Tüm crontab görevlerini sil |
| crontab -u kullanıcı | Belirli bir kullanıcının crontab'ını yönet |
Crontab dosyanızı düzenlemek için crontab -e komutunu kullanın. İlk kez çalıştırdığınızda size bir metin editörü seçimi sunulacaktır. Nano veya Vim tercih edebilirsiniz.
Crontab Zamanlama Formatları
Crontab zamanlama ifadeleri esnek bir yapıya sahiptir. İşte en yaygın kullanılan formatlar:
Sık Kullanılan Zamanlama Örnekleri
| Zamanlama | Açıklama |
|---|---|
| * * * * * | Her dakika çalışır |
| 0 * * * * | Her saat başı çalışır |
| 0 0 * * * | Her gece yarısı çalışır |
| 0 0 * * 0 | Her Pazar gece yarısı çalışır |
| 0 2 * * * | Her gün saat 02:00'de çalışır |
| */5 * * * * | Her 5 dakikada bir çalışır |
| 0 3 * * 1-5 | Hafta içi her gün saat 03:00'de çalışır |
Pratik Crontab Kullanım Senaryoları
1. Otomatik Yedekleme Betiği
Sunucunuzda düzenli yedekleme yapmak kritik öneme sahiptir. Araştırmalara göre şirketlerin %60'ı düzenli yedekleme yapmadıkları için veri kaybı yaşamaktadır. Aşağıdaki crontab girişi her gece saat 02:00'de yedekleme betiğinizi çalıştırır:
0 2 * * * /home/backup/yedekle.sh >> /var/log/yedekleme.log 2>&1
Bu komut çıktılarını bir log dosyasına yönlendirerek hata ayıklama yapabilirsiniz.
2. Log Dosyalarını Temizleme
Sunucu log dosyaları zamanla disk alanını doldurabilir. Aşağıdaki crontab girişi her hafta Pazar günü eski log dosyalarını temizler:
0 3 * * 0 find /var/log -name "*.log" -mtime +30 -delete
3. Veritabanı Optimizasyonu
MySQL veya MariaDB kullanıyorsanız, düzenli optimizasyon performansı artırır:
0 4 * * * mysqloptimize -A --all-databases >> /var/log/db_optimize.log 2>&1
4. SSL Sertifikası Yenileme Kontrolü
Let's Encrypt sertifikalarınızı otomatik yenilemek için:
0 6 * * * /usr/bin/certbot renew --quiet --deploy-hook "systemctl reload nginx"
Sunucularda Crontab Güvenliği
Güvenlik Önlemleri
Crontab kullanırken güvenlik konusuna dikkat etmelisiniz:
- Çalışma izinlerini kontrol edin: Betiklerinizin sadece gerekli kullanıcılar tarafından çalıştırılabilir olduğundan emin olun. chmod 755 veya chmod 700 kullanın.
- Ortam değişkenlerini yönetin: Crontab betikleri sınırlı ortam değişkeniyle çalışır. Tam yolları kullanın.
- Loglama yapın: Tüm crontab görevlerinin çıktılarını loglayın. Bu sayede sorunları kolayca tespit edebilirsiniz.
- Kullanıcı kısıtlamaları uygulayın:
/etc/cron.denyve/etc/cron.allowdosyalarını kullanarak crontab erişimini kısıtlayın.
Ortam Değişkeni Sorunları
Crontab betikleri çalışırken PATH değişkeni sınırlıdır. Bu nedenle betiklerinizde tam yollar kullanmanız önemlidir:
# Yanlış * * * * * php script.php # Doğru * * * * * /usr/bin/php /home/kullanici/script.php
Systemd Timer: Crontab'a Modern Alternatif
Modern Linux dağıtımlarında systemd timer, crontab'a güçlü bir alternatiftir. Araştırmalara göre sistem yöneticilerinin %35'i systemd timer'ı tercih etmektedir. Özellikle Fedora, Ubuntu 16.04+ ve CentOS 7+ sistemlerde kullanılabilir.
Crontab vs Systemd Timer Karşılaştırması
| Özellik | Crontab | Systemd Timer |
|---|---|---|
| Kurulum kolaylığı | Kolay | Orta |
| Loglama | Manuel | Otomatik (journalctl) |
| Bağımlılık yönetimi | Yok | Var |
| Kalıcılık | Var | Var |
| CPU/IO kontrolü | Yok | Var |
Eğer yüksek hassasiyetli zamanlama veya sistem hizmet bağımlılıkları gerekiyorsa systemd timer kullanmanızı öneririz. Daha basit görevler için crontab yeterlidir.
Crontab Hata Ayıklama ve İzleme
Log Dosyalarını İzleme
Crontab görevlerinizi izlemek için sistem loglarını kontrol edin:
grep CRON /var/log/syslog # veya journalctl -u cron
Test Çalıştırma
Bir betiği crontab'a eklemeden önce test etmek önemlidir. Betiğinizi manuel olarak çalıştırarak hata olup olmadığını kontrol edin:
/home/kullanici/betik.sh
Betik çalıştıktan sonra çıktıları ve hataları inceleyin. Her şey doğruysa crontab'a ekleyebilirsiniz.
Sonuç ve Öneriler
Crontab, Linux sunucu yönetiminde vazgeçilmez bir araçtır. Doğru kullanıldığında tekrarlayan görevleri otomatikleştirir, iş yükünü azaltır ve hata olasılığını minimize eder. Ancak güvenlik ve performans konularına dikkat etmek kritik önem taşır.
Sunucu güvenliği konusunda daha fazla bilgi için SSH Key ve 2FA güvenlik rehberimizi inceleyebilirsiniz. Ayrıca Cron job kullanımı hakkında detaylı bilgi için blog yazılarımızı okuyabilirsiniz.
Crontab görevlerinizi oluştururken her zaman loglama yapmayı, tam yollar kullanmayı ve betiklerinizi düzenli olarak test etmeyi unutmayın. Bu adımları takip ederek sunucu bakımınızı otomatik ve güvenli hale getirebilirsiniz.