Rehberler Uzun Okuma Cron

Zamanlanmış görevler nasıl kurulur?

cron vs systemd timer.

22 Mart 2026 16 dk okuma
Paylaş
X in

Giriş

Zamanlanmış görevler yedekleme, rapor üretimi, cache temizleme ve health check için vazgeçilmezdir. Linux'ta cron klasik çözümdür; systemd timer modern alternatiftir.

systemd timer'lar journal entegrasyonu, bağımlılık yönetimi ve monotonik saat avantajları sunar.

Bu rehberde her iki yöntemi karşılaştırıp üretim önerileri sunuyoruz.

crontab Sözdizimi

crontab -e kullanıcı crontab'ını düzenler. /etc/crontab sistem geneli. Beş alan: dakika saat gün ay haftanın_günü komut.

*/5 * * * * her 5 dakikada. 0 2 * * * her gece 02:00. @reboot boot'ta çalışır.

# Kullanıcı crontab
crontab -e

# Örnekler
0 3 * * * /opt/backup/backup.sh
*/15 * * * * /opt/healthcheck.sh
0 0 1 * * /opt/reports/monthly.sh

Cron Ortam ve Güvenlik

Cron minimal ortam değişkeni ile çalışır; PATH tam yol kullanın. MAILTO hata çıktısı için e-posta (genelde journal'a yönlendirin).

Script'lerde set -euo pipefail kullanın. Cron dosyaları 600 izinli olmalıdır.

#!/bin/bash
set -euo pipefail
export PATH=/usr/local/bin:/usr/bin:/bin
cd /opt/myapp
./manage.py cleanup_sessions

systemd Timer Unit

.timer ve .service çifti gerekir. OnCalendar=*-*-* 02:00:00 cron eşdeğeri. Persistent=true kaçırılan çalıştırmayı telafi eder.

AccuracySec=1min gecikme toleransı. RandomizedDelaySec yük dağıtımı.

# backup.timer
[Unit]
Description=Daily backup

[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
RandomizedDelaySec=300

[Install]
WantedBy=timers.target

Timer Service Unit

.service unit asıl komutu çalıştırır. Type=oneshot tek seferlik görev. User=deploy düşük yetki.

systemctl enable --now backup.timer timer'ı aktifleştirir.

# backup.service
[Unit]
Description=Backup job

[Service]
Type=oneshot
User=backup
ExecStart=/opt/backup/backup.sh

Cron vs systemd Timer

Cron: basit, evrensel, her Unix'te bilinir. Timer: journal log, bağımlılık, resource limit, monotonic clock.

Yeni projelerde systemd timer tercih edin; mevcut cron script'leri çalışmaya devam eder.

Kritik görevlerde çift tetikleme (cron + timer) kullanmayın; tek mekanizma seçin.

İzleme ve Hata Yönetimi

systemctl list-timers --all timer durumunu gösterir. journalctl -u backup.service son çalıştırma logları.

Başarısız cron görevleri sessizce kaybolabilir; mutlaka log ve alerting ekleyin.

  1. Tam yol kullanın
  2. set -euo pipefail
  3. Log ve alert
  4. Timer için Persistent=true
  5. Düzenli list-timers kontrolü

Sonuç

Cron ve systemd timer ikisi de geçerli; timer modern dağıtımlarda avantajlıdır. Görevleri versiyon kontrolünde tutun ve test edin.

Yedekleme ve kritik görevler için alerting zorunludur.