Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Cron Nedir? Linux'ta Zamanlanmış Görevler Oluşturma ve Yönetme Temelleri

devnix

Üye
Katılım
14 Mart 2026
Mesajlar
39
Merhaba arkadaşlar, bugün sizlere sistem yönetiminin bel kemiği sayılabilecek, her sunucu yöneticisinin mutlaka bilmesi gereken bir konuyu anlatacağım: Cron. Özellikle yeni başlayan arkadaşlar için "Cron nedir, nasıl çalışır?" sorularını cevaplayıp, terminalden adım adım nasıl zamanlanmış görev oluşturacağımızı göstereceğim. Bu sayede yedekleme, log temizleme, sistem güncellemesi gibi rutin işleri otomatikleştirip hayatınızı kolaylaştırabilirsiniz.

🔍 Cron Nedir ve Neden Önemlidir?

Cron, Unix ve Linux sistemlerde arka planda çalışan bir servistir (cron daemon veya crond). Bu servis, önceden tanımlanmış zamanlarda belirli komutların veya script'lerin otomatik olarak çalıştırılmasını sağlar. Benim sunucularımda yedek alma işlemlerinden, günlük performans raporlarının oluşturulmasına kadar neredeyse her şey için cron kullanırım. Manuel yapılması gereken tekrarlı işleri otomatik hale getirerek hem zaman kazanır hem de insan hatasını minimize edersiniz.

⚙️ Cron Yapısı ve Zaman Formatı

Cron, çalışma zamanını "crontab" adı verilen bir dosyada tutar. Her satır bir görevi temsil eder ve iki kısımdan oluşur: zaman ifadesi ve çalıştırılacak komut.

Zaman ifadesi şu sırayla 5 alandan oluşur:
Dakika (0-59)
Saat (0-23)
Gün (Ayın günü, 1-31)
Ay (1-12)
Haftanın Günü (0-7, 0 ve 7 Pazar)

Bash:
# Örnekler:
# Her gün gece 02:30'da çalıştır.
30 2    /root/scripts/backup.sh

# Her Pazartesi sabah 06:00'da çalıştır.
0 6   1 /usr/bin/system-cleanup

# Her ayın 1'i ve 15'i saat 12:00'de çalıştır.
0 12 1,15   /path/to/report-generator

# Her 10 dakikada bir çalıştır.
/10     /usr/local/bin/check-status

📝 Crontab Dosyasını Düzenleme

Cron görevlerini düzenlemek için `crontab` komutunu kullanırız. Her kullanıcının kendi crontab dosyası vardır. Sistem genelindeki görevler için ise genellikle /etc/crontab veya /etc/cron.d/ dizini kullanılır. Ben kişisel görevler için kullanıcı crontab'ını, sistem servisleri için ise /etc/cron.d/ yolunu tercih ederim.

Yeni bir görev eklemek veya mevcut görevleri düzenlemek için:
Bash:
crontab -e

Bu komut, varsayılan metin düzenleyicinizde (genellikle vi veya nano) crontab dosyanızı açar. Görevlerinizi buraya yukarıdaki formatta ekleyip kaydedebilirsiniz.

Mevcut görevleri listelemek için:
Bash:
crontab -l

Tüm görevleri silmek için (dikkatli kullanın!):
Bash:
crontab -r

⚠️ Dikkat Edilmesi Gerekenler

Cron çok güçlü bir araçtır ama yanlış kullanıldığında başınıza iş açabilir. Şu ayarlara çok dikkat etmelisiniz:

1. Yol (PATH) Sorunu: Cron, kullanıcının normal kabuğundaki (shell) ortam değişkenlerini yüklemeyebilir. Bu nedenle komutlarınızda mutlaka tam yolu kullanın. `ls` yerine /usr/bin/ls gibi. Ya da script'inizin en başına PATH tanımı ekleyin.
2. Çıktı Yönetimi: Cron bir görev çalıştırdığında, o görevün ekrana yazdırdığı her şey (stdout ve stderr) e-posta olarak sistem posta kutusuna gönderilir. Bu posta kutusunu kontrol etmezseniz, hataları göremezsiniz. Çıktıyı bir dosyaya yönlendirmek iyi bir fikirdir.
Bash:
     /root/script.sh > /var/log/cron_script.log 2>&1
3. Kullanıcı Hakları: Görevi hangi kullanıcı ile çalıştırdığınıza dikkat edin. `crontab -e` komutu o anki kullanıcı için geçerlidir. Root yetkisi gerektiren bir işlem yapacaksanız, root kullanıcısı ile düzenleme yapmalısınız (`sudo crontab -e`).

💎 Pratik Örnek: Günlük Yedekleme Script'i

Hadi basit ve kullanışlı bir örnek yapalım. Diyelim ki her gece 03:00'te bir veritabanı yedeği almak ve eski yedekleri temizlemek istiyoruz.

Önce script'imizi oluşturalım (/root/scripts/db_backup.sh):
Bash:
#!/bin/bash
# MySQL yedekleme script'i
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
MYSQL_USER="backup_user"
MYSQL_PASSWORD="sifreniz"

# Yedek dizini yoksa oluştur
mkdir -p $BACKUP_DIR

# Tüm veritabanlarını yedekle
mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD --all-databases | gzip > $BACKUP_DIR/full_backup_$DATE.sql.gz

# 7 günden eski yedekleri sil
find $BACKUP_DIR -name ".sql.gz" -mtime +7 -delete

# Log kaydı
echo "[$DATE] Yedekleme tamamlandı." >> /var/log/backup.log

Script'e çalıştırma izni verelim:
Bash:
chmod +x /root/scripts/db_backup.sh

Şimdi bu script'i cron'a ekleyelim (`crontab -e` komutu ile):
Bash:
# Her gece saat 03:00'te veritabanı yedeğini al
0 3    /root/scripts/db_backup.sh

🔧 Sorun Giderme ve Faydalı Komutlar

Cron göreviniz çalışmıyorsa ilk bakacağınız yer sistem loglarıdır:
Bash:
# Cron loglarını kontrol et (syslog veya özel cron log'u)
sudo grep CRON /var/log/syslog
# veya
sudo tail -f /var/log/cron.log

Ayrıca cron görevinizin doğru zamanlanıp zamanlanmadığını test etmek için, zaman ifadesini "şu andan bir dakika sonrası" olarak ayarlayıp logları takip edebilirsiniz.

Cron, sistem yönetimini otomatikleştirmenin en temel ve güçlü yoludur. Başlangıçta zaman formatı kafa karıştırıcı gelse de, birkaç görev yazdıktan sonra alışacaksınız. Benim sunucularda genelde kullandığım yöntem, tüm script'leri bir dizinde (/scripts) toplamak ve crontab dosyasını da yedeklemektir.

Peki siz cron'u en çok hangi işler için kullanıyorsunuz? Kendi sunucularınızda vazgeçilmez dediğiniz otomasyon script'leriniz var mı? Ya da bu temel bilgileri anlatırken atladığım bir nokta oldu mu? Soruları olan, takıldığı bir yer olan aşağıya yazsın, elimden geldiğince yardımcı olmaya çalışırım.
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri