Cron job, Linux'ta belirli komutları veya scriptleri otomatik olarak zamanlanmış şekilde çalıştırmanı sağlayan bir sistem aracıdır. Yedekleme, log temizleme, rapor gönderme gibi tekrarlayan işleri otomatikleştirmek için vazgeçilmezdir.
Cron Job Nedir?
Cron, Unix tabanlı işletim sistemlerinde gelen bir zamanlayıcıdır. crontab (cron table) dosyasına yazılan kurallarla hangi komutun ne zaman çalışacağını belirlersin.
Crontab Söz Dizimi
# Crontab formatı:
# dakika saat gün ay haftanın_günü komut
# 0-59 0-23 1-31 1-12 0-7
# Örnekler:
# Her gün saat 03:00'te yedek al
0 3 * * * /usr/local/bin/backup.sh
# Her 5 dakikada bir çalış
*/5 * * * * /usr/local/bin/check.sh
# Her Pazartesi saat 09:00'da
0 9 * * 1 /usr/local/bin/rapor.sh
# Her ayın 1'inde saat 00:00'da
0 0 1 * * /usr/local/bin/aylik-temizlik.sh
# Hafta içi her gün saat 18:00'de
0 18 * * 1-5 /usr/local/bin/is-raporu.sh
*— Her değer*/5— Her 5 birimde bir1,15— 1 ve 151-5— 1'den 5'e kadar@reboot— Sunucu başlangıcında@daily— Günde bir (00:00)@hourly— Saatte bir@weekly— Haftada bir
Crontab Yönetimi
# Mevcut cron job'ları listele
crontab -l
# Crontab'ı düzenle
crontab -e
# Başka kullanıcının crontab'ını düzenle
sudo crontab -u www-data -e
# Tüm cron job'ları sil
crontab -r
Pratik Örnekler
Otomatik Yedekleme
# Her gece 02:00'de MySQL yedek al
0 2 * * * mysqldump -u root -p'sifre' veritabani > /backup/db-$(date +\%Y\%m\%d).sql
# Her gece 03:00'te web dizinini yedekle
0 3 * * * tar -czf /backup/www-$(date +\%Y\%m\%d).tar.gz /var/www/html
Log Temizliği
# Her hafta pazar 04:00'te eski logları sil
0 4 * * 0 find /var/log -name "*.gz" -mtime +30 -delete
SSL Sertifika Yenileme
# Her gün 05:00'te Let's Encrypt yenileme kontrolü
0 5 * * * certbot renew --quiet
Sunucu Sağlık Kontrolü
# Her 10 dakikada servis kontrolü
*/10 * * * * systemctl is-active nginx || systemctl restart nginx
💡 Otomasyon İçin Güçlü Altyapı
Cron job'lar sunucu otomasyonunun temelidir. HazalHost VDS sunucularda tam root erişimi ile istediğin otomasyonu kurabilirsin. Türkiye lokasyonu ve DDoS koruma standart.
Cron Job Hata Ayıklama
# Çıktıyı log dosyasına yönlendir
*/5 * * * * /usr/local/bin/script.sh >> /var/log/cron-script.log 2>&1
# Cron loglarını kontrol et
sudo grep CRON /var/log/syslog
sudo journalctl -u cron
# Script'in çalışabilir olduğundan emin ol
chmod +x /usr/local/bin/script.sh
# Tam yol kullan (PATH sorunu)
*/5 * * * * /usr/bin/php /var/www/html/cron.php
- Script'e çalıştırma izni (chmod +x) verilmemiş
- Komutlarda tam yol kullanılmamış
- Çevre değişkenleri (PATH, HOME) tanımlı değil
- Cron çıktısı yönlendirilmemiş (mailbox doluyor)
Alternatif: systemd Timers
# Timer dosyası oluştur
sudo nano /etc/systemd/system/backup.timer
[Unit]
Description=Günlük Yedekleme Timer
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
[Install]
WantedBy=timers.target
# Service dosyası oluştur
sudo nano /etc/systemd/system/backup.service
[Unit]
Description=Yedekleme Servisi
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
# Aktifleştir
sudo systemctl enable backup.timer
sudo systemctl start backup.timer
# Timer'ları listele
systemctl list-timers
🚀 Otomasyonla Zamandan Kazan
Cron job'lar ile sunucunu otomatikleştir, zamandan kazan. HazalHost VDS'te tam kontrol seninle.
Sonuç
Cron job'lar Linux sunucunda tekrarlayan görevleri otomatikleştirmenin en etkili yoludur. Yedekleme, log temizliği, sertifika yenileme ve sağlık kontrolleri gibi işleri cron ile otomatikleştirerek hem zaman kazan hem de insan hatalarını minimize et.
Sık Sorulan Sorular (FAQ)
Cron job çalışıp çalışmadığını nasıl anlarım?
Çıktıyı bir log dosyasına yönlendirerek (>> /var/log/cron.log 2>&1) kontrol edebilirsin. Ayrıca grep CRON /var/log/syslog ile cron loglarını inceleyebilirsin.
Cron job saniye bazlı çalışabilir mi?
Hayır, cron minimum dakika bazlı çalışır. Saniye bazlı zamanlama için systemd timer veya özel bir daemon kullanman gerekir.
Cron ile systemd timer arasındaki fark nedir?
Cron daha basit ve yaygındır. systemd timer ise daha modern, detaylı loglama, bağımlılık yönetimi ve saniye bazlı zamanlama sunar. Kompleks senaryolarda systemd timer tercih edilebilir.