Bir sunucuda tekrar eden işleri — yedekleme, log temizleme, rapor üretme — elle yapmak hem zaman kaybı hem de hata kaynağıdır. Linux'ta bu işleri otomatikleştirmenin standart yolu cron'dur. Bu rehberde cron job kavramını, crontab sözdizimini ve pratik zamanlama örneklerini açıklıyoruz.
İlgili içerikler: systemd servis yönetimi · Linux sunucu komutları · SSH ile sunucuya bağlanma
Cron Job Nedir?
Cron, Linux'ta belirli zamanlarda komut veya betik çalıştıran bir zamanlayıcı servistir. Zamanlanan her göreve cron job denir. "Her gece 03:00'te veritabanını yedekle" veya "her 5 dakikada bir sistem durumunu kontrol et" gibi işler tam olarak cron'un alanıdır.
Her kullanıcının kendi cron tablosu (crontab) vardır; ayrıca sistem genelinde çalışan görevler için /etc/cron.d/ dizini ve /etc/crontab dosyası bulunur.
crontab Sözdizimi
Bir cron satırı beş zaman alanından ve çalıştırılacak komuttan oluşur. Beş alan sırasıyla şudur:
| Alan | Değer Aralığı |
|---|---|
| Dakika | 0–59 |
| Saat | 0–23 |
| Ayın günü | 1–31 |
| Ay | 1–12 |
| Haftanın günü | 0–7 (0 ve 7 = Pazar) |
Bir alana * yazmak "her değer" anlamına gelir. */5 gibi bir ifade "her 5 birimde bir" demektir.
Pratik Zamanlama Örnekleri
# Her gün gece 03:00'te yedekleme betiğini çalıştır
0 3 * * * /opt/betikler/yedek.sh
# Her 15 dakikada bir kontrol
*/15 * * * * /opt/betikler/kontrol.sh
# Her Pazartesi 09:00'da haftalık rapor
0 9 * * 1 /opt/betikler/rapor.sh
# Her ayın 1'inde gece yarısı
0 0 1 * * /opt/betikler/aylik.sh
Cron Job Oluşturma ve Düzenleme
Kendi crontab'ınızı düzenlemek için crontab -e komutunu kullanırsınız. Mevcut görevleri listelemek için crontab -l, tümünü silmek için crontab -r kullanılır. Bir görevi root yetkisiyle çalıştırmak isterseniz sudo crontab -e ile root'un crontab'ını düzenlersiniz.
PATH ile) çalıştırır. Bu yüzden cron job'larda komutların tam yolunu kullanın (örneğin /usr/bin/node) ve betiklerin içinde göreli yol yerine mutlak yol tercih edin.Cron Job Sorun Giderme
Bir cron job çalışmıyorsa, sorunu bulmanın en hızlı yolu çıktıyı bir log dosyasına yönlendirmektir:
# Hem normal çıktıyı hem hatayı log dosyasına yaz
0 3 * * * /opt/betikler/yedek.sh >> /var/log/yedek.log 2>&1
- Betik elle çalışıyor ama cron'da çalışmıyor: Genelde
PATHveya yol sorunudur — tam yol kullanın. - İzin hatası: Betiğin çalıştırma izni (
chmod +x) ve doğru kullanıcıyla çalıştığından emin olun. - Hiç çalışmıyor:
crontab -lile görevin gerçekten kayıtlı olduğunu ve cron servisinin (cron/crond) aktif olduğunu doğrulayın.
Sıkça Sorulan Sorular
Cron job çalışıp çalışmadığını nasıl anlarım?
Çıktıyı bir log dosyasına yönlendirin ve dosyayı kontrol edin. Ayrıca sistem logları (journalctl -u cron veya /var/log/syslog) cron'un görevi ne zaman tetiklediğini gösterir.
cron mu systemd timer mı kullanmalıyım?
Çoğu basit zamanlama işi için cron yeterli ve pratiktir. systemd timer'ları ise daha gelişmiş bağımlılık, loglama ve hatalı çalıştırmaları yakalama özellikleri sunar; karmaşık senaryolarda tercih edilebilir.
Sunucu kapalıyken kaçan görevler çalışır mı?
Klasik cron, kaçan görevleri telafi etmez. Sunucunun kapalı olabileceği durumlarda anacron veya systemd timer'ların Persistent seçeneği bu görevleri açılışta çalıştırır.
KEYDAL VPS ile yedekleme ve bakım görevlerinizi cron ile otomatikleştirin. KEYDAL VPS planlarını inceleyin