Ana içeriğe geç
Kategoriye Dön

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.

Okuma süresi: 10 dk Sunucu Yönetimi
croncronjobcrontabzamanlanmış görevlinuxotomasyonsunucu

İç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

KarakterAnlamıÖrnek
*Her değer* * * * * = her dakika
,Birden fazla değer1,15 * * * * = 1. ve 15. dakika
-Aralık1-5 * * * * = 1'den 5'e kadar dakikalar
/Adım*/5 * * * * = her 5 dakikada bir

Pratik Cron İfade Örnekleri

hljs bash
# 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

hljs bash
@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

hljs bash
# 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

hljs bash
# 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:

hljs bash
# 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
hljs bash
# /etc/crontab formatı (kullanıcı alanı eklidir)
30 2 * * * root /usr/bin/backup.sh

Cron Loglama

Log Dosyasını İzleme

hljs bash
# 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

hljs bash
# 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:

hljs bash
# 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

hljs bash
# 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

hljs bash
# 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

hljs bash
# 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

hljs bash
# 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.