Cronjob Yönetimi: Zamanlanmış Görev Oluşturma
Linux'ta crontab ile zamanlanmış görev oluşturma, cron ifade sözdizimi, pratik örnekler, loglama ve yaygın hatalardan kaçınma rehberi.
İçindekiler
Cronjob Yönetimi: Zamanlanmış Görev Oluşturma
Cron, Linux sistemlerde belirli zamanlarda veya aralıklarla komut ve betikleri otomatik olarak çalıştıran bir zamanlayıcı servisidir. Yedekleme, log temizleme, güncelleme kontrolü gibi tekrarlayan görevleri otomatikleştirmek için vazgeçilmezdir.
Cron servisi çoğu Linux dağıtımında varsayılan olarak kurulu ve çalışır durumdadır. systemctl status cron veya systemctl status crond komutuyla durumunu kontrol edebilirsiniz.
Crontab Sözdizimi
Her cron görevi beş zaman alanı ve çalıştırılacak komuttan oluşur:
* * * * * /path/to/command
│ │ │ │ │
│ │ │ │ └── Haftanın günü (0-7, 0 ve 7 = Pazar)
│ │ │ └──── Ay (1-12)
│ │ └────── Ayın günü (1-31)
│ └──────── Saat (0-23)
└────────── Dakika (0-59)
Özel Karakterler
| Karakter | Anlamı | Örnek |
|---|---|---|
* | Her değer | * * * * * = her dakika |
, | Birden fazla değer | 1,15 * * * * = 1. ve 15. dakika |
- | Aralık | 1-5 * * * * = 1'den 5'e kadar dakikalar |
/ | Adım | */5 * * * * = her 5 dakikada bir |
Pratik Cron İfade Örnekleri
# Her dakika çalıştır
* * * * * /usr/bin/script.sh
# Her saat başı çalıştır
0 * * * * /usr/bin/script.sh
# Her gün saat 02:30'da çalıştır
30 2 * * * /usr/bin/backup.sh
# Her Pazartesi saat 08:00'de çalıştır
0 8 * * 1 /usr/bin/weekly-report.sh
# Her ayın 1'inde saat 00:00'da çalıştır
0 0 1 * * /usr/bin/monthly-cleanup.sh
# Her 5 dakikada bir çalıştır
*/5 * * * * /usr/bin/check-service.sh
# Hafta içi (Pazartesi-Cuma) her gün saat 09:00'da
0 9 * * 1-5 /usr/bin/workday-task.sh
# Her 6 saatte bir çalıştır
0 */6 * * * /usr/bin/sync.sh
Özel Kısayollar
@reboot # Sistem başlangıcında bir kez
@yearly # Yılda bir kez (0 0 1 1 *)
@monthly # Ayda bir kez (0 0 1 * *)
@weekly # Haftada bir kez (0 0 * * 0)
@daily # Günde bir kez (0 0 * * *)
@hourly # Saatte bir kez (0 * * * *)
crontab Kullanımı
Crontab Düzenleme
# Mevcut kullanıcının crontab'ını düzenle
crontab -e
# Belirli kullanıcının crontab'ını düzenle (root gerektirir)
crontab -u kullanici_adi -e
# Mevcut crontab'ı listele
crontab -l
# Crontab'ı sil (dikkatli kullanın!)
crontab -r
crontab -r komutu tüm cron görevlerinizi siler ve geri alınamaz. Silmeden önce crontab -l > crontab_yedek.txt ile yedek alın.
İlk Kez crontab Düzenleme
# crontab -e komutunu çalıştırın
crontab -e
# Editör seçimi sorulursa nano'yu seçin (1 numaralı seçenek)
# Dosyanın sonuna görevinizi ekleyin:
30 2 * * * /home/kullanici/backup.sh
# Kaydet ve çık: Ctrl+X, Y, Enter (nano için)
Sistem Geneli Cron Dosyaları
Sistem geneli cron görevleri için /etc/cron* dizinleri kullanılır:
# Dizin yapısı
/etc/crontab # Ana sistem crontab dosyası
/etc/cron.d/ # Uygulama cron dosyaları
/etc/cron.hourly/ # Saatlik çalışan betikler
/etc/cron.daily/ # Günlük çalışan betikler
/etc/cron.weekly/ # Haftalık çalışan betikler
/etc/cron.monthly/ # Aylık çalışan betikler
# /etc/crontab formatı (kullanıcı alanı eklidir)
30 2 * * * root /usr/bin/backup.sh
Cron Loglama
Log Dosyasını İzleme
# Debian/Ubuntu'da cron logları
sudo tail -f /var/log/syslog | grep CRON
# RHEL/CentOS'ta
sudo tail -f /var/log/cron
# journald ile
sudo journalctl -u cron -f
sudo journalctl -u crond -f
Çıktıyı Dosyaya Yönlendirme
# Hem stdout hem stderr'i dosyaya yönlendir
30 2 * * * /usr/bin/backup.sh >> /var/log/backup.log 2>&1
# Sadece hataları kaydet
30 2 * * * /usr/bin/backup.sh 2>> /var/log/backup-errors.log
# Çıktıyı tamamen sustur
30 2 * * * /usr/bin/backup.sh > /dev/null 2>&1
Log dosyalarının zamanla büyümemesi için logrotate ile döndürme yapılandırın.
Yaygın Hatalar ve Çözümleri
1. Ortam Değişkenleri Sorunu
Cron, kullanıcı kabuğunun ortam değişkenlerini miras almaz. PATH gibi değişkenleri açıkça tanımlayın:
# crontab dosyasının başına ekleyin
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
SHELL=/bin/bash
# veya komutta tam yol kullanın
30 2 * * * /usr/bin/python3 /home/user/script.py
2. Betik Çalıştırma İzni
# Betiğe çalıştırma izni verin
chmod +x /home/kullanici/backup.sh
# İzinleri kontrol edin
ls -la /home/kullanici/backup.sh
3. Çalışma Dizini Sorunu
# Cron görevinde çalışma dizinini açıkça belirtin
30 2 * * * cd /var/www/html && php artisan schedule:run
# veya
30 2 * * * /bin/bash -c 'cd /var/www/html && php artisan schedule:run'
4. Cron Servisini Kontrol Etme
# Cron servisinin çalışıp çalışmadığını kontrol et
sudo systemctl status cron # Debian/Ubuntu
sudo systemctl status crond # RHEL/CentOS
# Servisi yeniden başlat
sudo systemctl restart cron
Cron Görevini Test Etme
# Betiği manuel olarak çalıştırarak test edin
bash /home/kullanici/backup.sh
# Cron ortamını simüle ederek test edin
env -i HOME=/root SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin /home/kullanici/backup.sh
# Cron çıktısını e-posta yerine dosyaya yönlendirin
MAILTO=""
30 2 * * * /home/kullanici/backup.sh >> /tmp/cron-test.log 2>&1
Sonuç
Cron, Linux sistem yönetiminin temel araçlarından biridir. Doğru sözdizimi, ortam değişkeni yönetimi ve loglama ile güvenilir otomasyon sağlayabilirsiniz. Görevlerinizi düzenli olarak crontab -l ile kontrol edin ve log dosyalarını izleyerek sorunları erken tespit edin.
İlgili Makaleler
VDS Sunucuya SSH ile Bağlanma Rehberi (PuTTY & Terminal)
Linux VDS sunucunuza SSH ile bağlanma adımları: PuTTY, Terminal, anahtar tabanlı kimlik doğrulama, Path Panel firewall kuralı ve güvenlik ipuçları.
Windows VDS'e RDP ile Bağlanma ve Güvenlik Rehberi
Windows Server VDS sunucunuza Uzak Masaüstü (RDP) ile bağlanma adımları, NLA güvenlik ayarları, Path Panel firewall kuralı ve sorun giderme rehberi.
VDS Sunucu İşletim Sistemi Değiştirme Rehberi (Reinstall)
REXE panel üzerinden VDS sunucunuzun işletim sistemini değiştirme adımları, yedekleme önerileri, desteklenen Linux ve Windows Server sürümleri.