Cron, Unix/Linux sistemlerinde belirli zamanlarda otomatik olarak komut veya script çalıştırmak için kullanılan bir zamanlayıcı servisidir. Yedekleme, log temizleme, rapor oluşturma, veritabanı bakımı gibi tekrarlayan görevleri otomatikleştirmek için vazgeçilmez bir araçtır.
Cron İfadesi Söz Dizimi
Bir cron ifadesi 5 alandan oluşur ve her alan zamanın farklı bir birimini temsil eder:
┌───────────── 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)
│ │ │ │ │
* * * * * komut
Özel Karakterler
*(yıldız) — Her değer.* * * * *her dakika çalışır,(virgül) — Birden fazla değer.1,15,30→ 1., 15. ve 30. dakikada-(tire) — Aralık.9-17→ 9'dan 17'ye kadar her saat/(eğik çizgi) — Adım.*/5→ her 5 dakikada bir
Yaygın Cron Kalıpları
# Her dakika
* * * * *
# Her saat başı
0 * * * *
# Her gün gece yarısı
0 0 * * *
# Her gün sabah 9'da
0 9 * * *
# Her Pazartesi sabah 8'de
0 8 * * 1
# Her ayın 1'inde gece yarısı
0 0 1 * *
# Her 15 dakikada bir
*/15 * * * *
# Hafta içi her gün sabah 6'da
0 6 * * 1-5
# Her 6 saatte bir
0 */6 * * *
# Her yılın 1 Ocak'ında gece yarısı
0 0 1 1 *
# Hafta sonları saat 10'da
0 10 * * 6,0
# Ayın 1'i ve 15'inde saat 12'de
0 12 1,15 * *
Crontab Komutları
crontab, kullanıcı bazlı cron görevlerini yönetmek için kullanılan komuttur:
# Mevcut cron görevlerini listele
crontab -l
# Cron görevlerini düzenle
crontab -e
# Tüm cron görevlerini sil (dikkatli kullanın!)
crontab -r
# Başka bir kullanıcının cron görevlerini görüntüle (root gerekir)
crontab -u kullanici -l
# Dosyadan cron görevlerini yükle
crontab dosya.txt
Crontab Dosya Formatı
# Ortam değişkenleri
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
[email protected]
# Görevler
0 2 * * * /home/fatih/backup.sh
*/5 * * * * /usr/bin/php /var/www/cron.php
0 9 * * 1 /home/fatih/rapor.sh >> /var/log/rapor.log 2>&1
Çıktı Yönetimi
Cron görevlerinin çıktısını yönetmek önemlidir, aksi halde her çalışmada sistem maili gönderilir:
# Çıktıyı dosyaya yönlendir
0 2 * * * /backup.sh >> /var/log/backup.log 2>&1
# Hem stdout hem stderr'i ayrı dosyalara
0 2 * * * /backup.sh > /var/log/backup.log 2> /var/log/backup-error.log
# Çıktıyı tamamen bastır
0 2 * * * /backup.sh > /dev/null 2>&1
2>&1 ifadesi standart hata çıktısını (stderr) standart çıktıya (stdout) yönlendirir.
Özel Zaman İfadeleri
Bazı cron uygulamaları okunabilirliği artıran kısayollar destekler:
@reboot → Sistem başlangıcında bir kez
@yearly → Yılda bir (0 0 1 1 *)
@monthly → Ayda bir (0 0 1 * *)
@weekly → Haftada bir (0 0 * * 0)
@daily → Günde bir (0 0 * * *)
@hourly → Saatte bir (0 * * * *)
Hata Ayıklama İpuçları
- Tam yol kullanın: Cron, kullanıcının PATH değişkenini yüklemez. Komutlarda mutlaka tam yol belirtin:
/usr/bin/php - Ortam değişkenleri: Cron ortamı minimal olduğu için gerekli değişkenleri crontab dosyasında veya script içinde tanımlayın
- Çalıştırma izni: Script dosyasında
chmod +xile çalıştırma izni olduğundan emin olun - Log kontrolü:
/var/log/syslogveya/var/log/crondosyalarını kontrol edin - Satır sonu: Crontab dosyasının sonunda boş bir satır olmalıdır
- Özel karakterler: Crontab'da
%işareti özeldir; kullanmanız gerekiyorsa\%ile escape edin
Güvenlik Uyarıları
- Cron görevlerinde asla şifreleri düz metin olarak yazmayın
- Script dosyalarının sahipliğini ve izinlerini kontrol edin
- Root crontab'ını düzenlerken ekstra dikkatli olun
- Düzenli olarak cron görevlerini gözden geçirin:
crontab -l
Cron ifadelerini kolayca oluşturmak ve anlamak için SiteScripti'nin Cron Oluşturucu ve Cron Açıklayıcı araçlarını kullanabilirsiniz.
Bu konuyla ilgili araçlarımızı da deneyin: Teknoloji Dedektörü, Docker Compose Oluşturucu, ENV Generator