Ana içeriğe geç
Cron Job Kullanımı: Sıfırdan Başlangıç
  1. Posts/

Cron Job Kullanımı: Sıfırdan Başlangıç

Bu yazı, cron job mantığını hiç bilmeyen biri için hazırlanmıştır. Cron’un ne işe yaradığını, nasıl çalıştığını, nasıl yazıldığını ve günlük sistem yönetiminde nasıl güvenli kullanılacağını sade ama doğru şekilde anlatan bir başlangıç rehberidir.


1. Cron Job Nedir?
#

Cron, Linux/Unix sistemlerde belirli komutları veya scriptleri belirli zamanlarda otomatik çalıştıran zamanlayıcı sistemidir.

Bir cron job’u şöyle düşünebilirsin:

“Şu komutu her gün saat 03:00’te çalıştır.”
“Bu scripti her pazartesi sabahı çalıştır.”
“Her 5 dakikada bir sistem durumunu kontrol et.”

Yani cron, bilgisayara veya sunucuya verilen otomatik görev talimatıdır.


2. Cron Nerelerde Kullanılır?
#

Cron job genellikle tekrar eden sistem işleri için kullanılır:

  • Her gece veritabanı yedeği almak
  • Log dosyalarını temizlemek
  • SSL sertifika yenileme kontrolleri yapmak
  • Disk doluluk kontrolü yapmak
  • Rapor üretmek ve e-posta göndermek
  • Eski dosyaları silmek

Örneğin bir sunucuda her gece saat 02:00’de yedek almak istiyorsan, bunu elle yapmak yerine cron’a yaptırırsın.


3. Cron Satır Yapısı
#

Bir cron job satırı şu yapıdadır:

* * * * * çalıştırılacak_komut
Cron Satır Yapısı

İlk bakışta karmaşık görünebilir, ama aslında 5 adet zaman alanı vardır:

Alan Anlamı Değer Aralığı
1 Dakika 0-59
2 Saat 0-23
3 Ayın günü 1-31
4 Ay 1-12
5 Haftanın günü 0-7 (Pazar = 0 veya 7)

Örnek:

30 2 * * * /home/user/backup.sh

Bu şu anlama gelir: Her gün saat 02:30’da /home/user/backup.sh scriptini çalıştır.


4. Cron Nerede Tanımlanır?
#

Kullanıcı bazlı cron job’ları düzenlemek için:

crontab -e

Mevcut cron job’ları görüntülemek için:

crontab -l

Tüm cron job’ları silmek için:

crontab -r

⚠️ Dikkat: crontab -r tüm cron kayıtlarını siler. Geri alma yoktur.


5. Yıldız * Ne Anlama Gelir?
#

Cron’da * işareti “her değer” anlamına gelir.

* * * * * echo "Merhaba"

Bu satır her dakika çalışır — çünkü tüm zaman alanları yıldızdır (her dakika, her saat, her gün, her ay, haftanın her günü).


6. Temel Cron Örnekleri
#

Her dakika çalıştır
#

* * * * * /home/user/script.sh

Her 5 dakikada bir çalıştır
#

*/5 * * * * /home/user/script.sh

Her saat başı çalıştır
#

0 * * * * /home/user/script.sh

Her gün gece 02:00’de çalıştır
#

0 2 * * * /home/user/backup.sh

Her pazartesi saat 09:00’da çalıştır
#

0 9 * * 1 /home/user/weekly-report.sh

Hafta içi her gün 09:00’da çalıştır
#

0 9 * * 1-5 /scripts/workday.sh

Her ayın 1. günü 00:00’da çalıştır
#

0 0 1 * * /home/user/monthly-job.sh

7. Virgül, Tire ve Bölü İşareti Kullanımı
#

Karakter Anlamı Örnek
* Her değer Her dakika, her saat
, Birden fazla değer 1,3,5
- Aralık 1-5
/ Belirli aralıklarla */10
# Pazartesi, Çarşamba, Cuma — saat 09:00
0 9 * * 1,3,5 /scripts/job.sh

# Hafta içi her gün — saat 09:00
0 9 * * 1-5 /scripts/job.sh

# Her 15 dakikada bir
*/15 * * * * /scripts/job.sh

8. Özel Cron Kısaltmaları
#

Kısaltma Anlamı
@reboot Sistem açıldığında çalışır
@yearly / @annually Yılda bir çalışır
@monthly Ayda bir çalışır
@weekly Haftada bir çalışır
@daily / @midnight Günde bir çalışır
@hourly Saatte bir çalışır
@reboot /home/user/startup.sh

9. Cron ile Script Çalıştırma
#

Önce scriptin çalıştırılabilir olduğundan emin ol:

chmod +x /home/user/backup.sh

Sonra cron’a ekle:

crontab -e

Dosyanın en altına şunu yaz:

0 2 * * * /home/user/backup.sh

Shebang Kullanımı
#

Bir bash scriptinin başına mutlaka şu satırı ekle:

#!/bin/bash

Bu satır işletim sistemine “bu dosyayı bash ile çalıştır” der.


10. Mutlak Dosya Yolu ve PATH Problemi
#

Cron, terminaldeki kullanıcı ortamınla birebir aynı ortamda çalışmaz. Bu yüzden her zaman mutlak yol kullan:

# 🚫 Kötü
0 2 * * * backup.sh
0 2 * * * python3 /home/user/script.py

# ✅ İyi
0 2 * * * /home/user/backup.sh
0 2 * * * /usr/bin/python3 /home/user/script.py

Bir komutun tam yolunu bulmak için:

which python3
# → /usr/bin/python3

11. Log Dosyasına Çıktı Almak
#

Cron job’lar arka planda çalışır. Çıktıları loglamak için:

0 2 * * * /home/user/backup.sh >> /var/log/backup.log 2>&1
İfade Anlamı
>> Dosyanın sonuna ekle
2>&1 Hata çıktısını da log’a yaz
> Dosyayı her seferinde sıfırla

12. Cron Job Çalışıyor mu Nasıl Anlaşılır?
#

# Cron servis durumu (Debian/Ubuntu)
systemctl status cron

# Kayıtlı cron job'ları listele
crontab -l

# Sistem logları (Debian/Ubuntu)
grep CRON /var/log/syslog

# RHEL/CentOS/AlmaLinux
grep CRON /var/log/cron

# Systemd
journalctl -u cron

13. Kullanıcı Cron’u ve Root Cron’u Farkı
#

# Kullanıcı cron'u (o kullanıcı yetkisiyle çalışır)
crontab -e

# Root cron'u (root yetkisiyle çalışır — dikkatli kullan)
sudo crontab -e

/etc/crontab dosyasında kullanıcı alanı da vardır:

# /etc/crontab formatı
0 2 * * * root /home/user/backup.sh

Kullanıcı crontab’ına kullanıcı adı yazılmaz. Bu fark önemlidir.


14. Pratik Örnek: Her Gece Yedek Alma
#

#!/bin/bash

DATE=$(date +%Y-%m-%d_%H-%M-%S)
SOURCE="/var/www/html"
DEST="/home/user/backups"

mkdir -p "$DEST"
tar -czf "$DEST/website_backup_$DATE.tar.gz" "$SOURCE"

echo "Backup completed at $DATE"

Cron kaydı:

0 2 * * * /home/user/backup.sh >> /home/user/backup.log 2>&1

15. Pratik Örnek: Eski Dosyaları Silme
#

# 30 günden eski .tar.gz dosyalarını sil
0 3 * * * find /home/user/backups -type f -name "*.tar.gz" -mtime +30 -delete >> /home/user/cleanup.log 2>&1

⚠️ -delete komutunu önce -delete olmadan test et:

find /home/user/backups -type f -name "*.tar.gz" -mtime +30

16. Çakışan İşlere Dikkat: flock
#

Uzun süren bir iş her 5 dakikada bir çalışıyorsa, önceki bitmeden yenisi başlayabilir. Bunu flock ile engelle:

*/5 * * * * flock -n /tmp/myjob.lock /home/user/myjob.sh >> /home/user/myjob.log 2>&1

Önceki iş hâlâ çalışıyorsa yeni iş başlamaz.


17. Cron Cheat Sheet
#

Cron Cheat Sheet
İhtiyaç Cron İfadesi
Her dakika * * * * *
Her 5 dakikada bir */5 * * * *
Her 15 dakikada bir */15 * * * *
Her saat başı 0 * * * *
Her gün 02:00 0 2 * * *
Her gün 08:30 30 8 * * *
Her pazartesi 09:00 0 9 * * 1
Hafta içi 09:00 0 9 * * 1-5
Her ayın 1’i 00:00 0 0 1 * *
Her yıl 1 Ocak 00:00 0 0 1 1 *
Sistem açıldığında @reboot

18. Sık Yapılan Hatalar
#

Hata Yanlış Doğru
Çalıştırma izni yok chmod verilmemiş chmod +x /path/script.sh
Göreli yol backup.sh /home/user/backup.sh
PATH problemi python3 app.py /usr/bin/python3 /home/user/app.py
Log yazmamak çıktı kaybolur >> /var/log/job.log 2>&1
Script içinde göreli yol cp data.txt backup/ cp /home/user/data.txt /home/user/backup/

19. Cron Job Yazarken Kontrol Listesi
#

Bir cron job eklemeden önce şunları kontrol et:

  • Komut terminalde elle çalışıyor mu?
  • Script çalıştırılabilir mi? (chmod +x verildi mi?)
  • Dosya yolları mutlak mı?
  • Kullanıcı yetkisi doğru mu?
  • Log dosyasına çıktı yazıyor mu?
  • Hata çıktısı da loglanıyor mu? (2>&1)
  • İş çok sık çalışıp sistemi yoruyor mu?
  • Önceki çalışma bitmeden yenisi başlar mı?
  • Silme/değiştirme yapan komutlar test edildi mi?
  • Cron satırına açıklama eklendi mi?

20. Güvenli Cron Job Şablonu
#

# Açıklama: Her gece web dizinini yedekler
# Zaman: Her gün 02:00
0 2 * * * /home/user/backup.sh >> /home/user/logs/backup.log 2>&1

Açıklama eklemek birkaç ay sonra “bu ne yapıyordu?” sorusunu önler.


21. Hızlı Başlangıç
#

Script oluştur:

nano /home/user/hello-cron.sh

İçine yaz:

#!/bin/bash
echo "Cron çalıştı: $(date)" >> /home/user/hello-cron.log

Çalıştırma izni ver ve cron’a ekle:

chmod +x /home/user/hello-cron.sh
crontab -e
# en alta yaz:
* * * * * /home/user/hello-cron.sh

Bir dakika sonra kontrol et:

cat /home/user/hello-cron.log
Cron çalıştı: Mon Jun 29 12:00:01 +03 2026
Cron çalıştı: Mon Jun 29 12:01:01 +03 2026

Bu çıktıyı görüyorsan ilk cron job’un başarıyla çalışıyor demektir. 🎉


Özet
#

Cron job, Linux sistemlerde tekrar eden işleri otomatikleştirmek için kullanılır. En temel yapı:

# dakika saat ayınGünü ay haftanınGünü  komut
  *      *    *        *  *              komut

Başlangıçta öğrenmen gereken en önemli şeyler:

  1. Cron zaman formatını okumak
  2. Mutlak dosya yolu kullanmak
  3. Scriptlere çalıştırma izni vermek
  4. Log çıktısı almak
  5. Cron servis ve sistem loglarını kontrol etmek
  6. Root cron’u ile kullanıcı cron’u farkını bilmek

Cron basit görünür ama güçlüdür — özellikle silme, taşıma, yedekleme ve root yetkisi gerektiren işlerde dikkatli kullan.

Related