Zamanlanmış görev, belirlediğiniz anda veya düzenli aralıklarla otomatik çalışan komut, script veya programdır. Yedek alma, rapor üretme, kuyruk boşaltma ve sağlık kontrolü gibi tekrarlayan işler kullanıcı oturumu olmadan arka planda yürür.
Bu rehber kavramı netleştirir; Linux cron job, Windows Görev Zamanlayıcı, macOS launchd, bulut zamanlayıcıları ve Kubernetes CronJob'u karşılaştırır. Adım örnekleri, sık hatalar ve iş yalnızca bir URL tetikliyorsa cronjob.com.tr alternatifini içerir.
Hedef kitle: hangi aracı seçeceğine karar veren geliştiriciler ve sistem yöneticileri. Beş alanlı ifadeler için crontab sözdizimi; Windows odaklı kurulum için Windows zamanlanmış görev sayfasına bakın.
Zamanlanmış Görev Ne Anlama Gelir?
İngilizcede scheduled task veya (Unix dünyasında) cron job denir. Ortak bileşenler: bir zaman kuralı, çalışacak komut veya iş yükü, çalıştıran kimlik (kullanıcı/servis hesabı) ve isteğe bağlı log/bildirim. Telefon alarmı basit bir benzetmedir; sunucuda aynı fikir yedek script'ini 03:00'te başlatmaya dönüşür.
İki tetikleme modeli yaygındır: takvim/aralık (her gece, her 15 dakika) ve olay (dosya değişince, kuyruğa mesaj gelince). Bu sayfa takvim/aralık modeline odaklanır.
Linux / Unix — Cron
Klasik araç cron daemon'udur. Kullanıcı tablosu crontab -e ile düzenlenir; satırda beş zaman alanı ve komut vardır.
# Her gün 03:00 yedek
0 3 * * * /scripts/yedek.sh >> /var/log/yedek.log 2>&1
# Her 15 dakikada sağlık kontrolü
*/15 * * * * /scripts/saglik-kontrol.sh
Avantajları: yaygın Linux dağıtımlarına kurulabilir, metin tabanlıdır, otomasyona uygundur. Minimum birim genelde dakikadır. Systemd timer alternatifleri için cron vs systemd timer karşılaştırmasına bakın.
Windows — Görev Zamanlayıcı
Windows'ta arayüz Görev Zamanlayıcı (taskschd.msc), CLI ise schtasks ve PowerShell cmdlet'leridir.
- Başlat menüsünden "Görev Zamanlayıcı"yı açın veya
taskschd.mscçalıştırın. - "Temel Görev Oluştur" ile tetikleyici (günlük/haftalık) ve eylemi (program/script) seçin.
- Veya komut satırından oluşturun (aşağıda).
- Görev Geçmişi'nden son çalışma sonucunu kontrol edin.
schtasks /create /tn "Gunluk Yedek" /tr "C:\scripts\yedek.bat" /sc daily /st 03:00
schtasks /create /tn "Saglik Kontrol" /tr "C:\scripts\kontrol.bat" /sc minute /mo 30
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\scripts\yedek.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 3am
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "Gunluk Yedek"
macOS — Launchd (ve Cron)
Apple'ın önerdiği sistem launchd'dir; zamanlama plist (XML) ile tanımlanır. macOS'ta cron da vardır ancak uzun vadede launchd tercih edilir. Ayrıntılı kurulum: macOS cron job.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.ornek.yedek</string>
<key>ProgramArguments</key>
<array>
<string>/Users/kullanici/scripts/yedek.sh</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>3</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
</dict>
</plist>
Bulut ve Kubernetes
AWS EventBridge (eski CloudWatch Events): rate(1 hour) veya cron ifadesiyle Lambda/ECS tetikleme.
Google Cloud Scheduler: HTTP, Pub/Sub veya App Engine hedefi.
gcloud scheduler jobs create http gunluk-yedek \
--schedule="0 3 * * *" \
--uri="https://api.ornek.com/yedek"
Azure Functions Timer Trigger: NCRONTAB benzeri ifade (saniye alanı dahil altı alanlı format kullanılır).
Kubernetes CronJob: Küme içinde zamanlanmış Job üretir; dağıtık ve kaynak limitlidir. Örnek manifesto için Docker / Kubernetes cron rehberine bakın.
Zamanlama bir entegrasyon akışını başlatacaksa kod yazmak yerine görsel düğümler kullanılabilir. n8n Schedule Trigger ile otomasyon kurma, zaman kuralını sonraki API ve veri işleme adımlarından ayrı yapılandırmayı gösterir; akışın hata ve tekrar davranışı da zamanlama kadar önemlidir.
apiVersion: batch/v1
kind: CronJob
metadata:
name: veritabani-yedek
spec:
schedule: "0 3 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: yedek
image: yedek-imaj:latest
command: ["/scripts/yedek.sh"]
restartPolicy: OnFailure
Platform Karşılaştırması
| Özellik | Linux Cron | Windows Task Scheduler | macOS Launchd | Kubernetes CronJob |
|---|---|---|---|---|
| Minimum birim | Dakika | Saniye (yapılandırmaya bağlı) | Saniye | Dakika |
| Arayüz | CLI | GUI + CLI | Plist + CLI | YAML |
| Dağıtık çalışma | Hayır | Hayır | Hayır | Evet |
| Kaynak sınırı | Sınırlı | Var | Var | Kapsamlı |
Gerçek Senaryolar
Senaryo 1: Gece veritabanı yedeği
Üretim DB dump'ı trafiğin düşük olduğu 03:00'te alınır. Linux'ta crontab satırı; Windows'ta günlük tetikleyici + .bat/.ps1; konteyner ortamında CronJob + kalıcı volume. Başarı ölçütü: çıkış kodu 0 ve yedek dosyasının boyutu sıfır değil.
Senaryo 2: Uygulama sağlık kontrolü
Her 5 dakikada /health endpoint'ine GET. Sunucu içi curl cron'u veya dış HTTP zamanlayıcı kullanılabilir. Üç ardışık başarısızlıktan sonra bildirim almak operasyonel olarak faydalıdır.
Adım Adım: Linux'ta İlk Görev
Aşağıdaki akış çoğu VPS ve bare-metal Linux kurulumunda geçerlidir. Amaç, zamanlayıcıya güvenmeden önce komutun elle başarılı olduğunu kanıtlamaktır.
- Script'i yazın ve çalıştırılabilir yapın:
chmod +x /scripts/yedek.sh. - Manuel deneyin; hata yoksa devam edin. Aynı kullanıcı hesabıyla çalıştırın (ileride crontab hangi kullanıcıdaysa o).
crontab -eile satırı ekleyin; çıktıyı loglayın.crontab -lve log dosyasıyla ilk tetiklemeyi doğrulayın.- Saat dilimini kontrol edin (
timedatectl/TZ); UTC/local karışıklığı sık görülür. - İsteğe bağlı: kısa süreliğine
* * * * *ile dakikalık test yapıp ardından üretim aralığına dönün.
Windows'ta aynı mantık geçerlidir: önce C:\scripts\yedek.bat çift tıklayın veya PowerShell'den çalıştırın; sonra Görev Zamanlayıcı'ya ekleyin. macOS'ta plist'i yüklemeden script'i Terminal'den bir kez koşturun.
Sık Hatalar ve Çözümleri
/bin/sh: 1: script.sh: not found veya No such file or directory
Neden: Göreli yol; cron'un çalışma dizini home'dur. Çözüm: Mutlak yol kullanın.
Permission denied
Neden: Execute bit yok veya yanlış kullanıcı. Çözüm: chmod +x; görevi doğru kullanıcının zamanlayıcısına koyun.
Windows: ERROR: Access is denied (schtasks)
Neden: Yönetici veya "en yüksek ayrıcalıklarla çalıştır" gerekir. Çözüm: Yönetici kabuğundan oluşturun; görev özelliklerinde hesabı ve parolayı doğrulayın.
Görev "çalıştı" ama iş yapılmadı
Neden: Ortam değişkeni / PATH farkı; çıktı yok sayıldığı için hata görünmez. Çözüm: Log yönlendirmesi ekleyin; aynı kullanıcıyla interaktif denemeyle karşılaştırın.
Kubernetes: CronJob oluşturuyor ama Job Pending
Neden: Pod için yetersiz kaynak veya image pull sorunu. Çözüm: kubectl describe job ve event'lere bakın; concurrencyPolicy ve başarısız Job birikimini kontrol edin.
cronjob.com.tr ile HTTP Alternatifi
Zamanlanmış görev sunucu içinde dosya/DB işlemi gerektiriyorsa dış servis yetmez. Ancak tetiklenecek şey internetten erişilen bir HTTPS uç noktasıysa:
- cronjob.com.tr'de ücretsiz iş oluşturun (kredi kartı yok).
- URL, metot (GET/POST/... ), isteğe bağlı header ve gövde girin.
- Hazır aralık veya 5 alanlı cron ifadesi seçin; saat dilimi iş bazında (varsayılan Europe/Istanbul).
- Başarı: HTTP 200–399. Timeout aralığa göre ayarlanır (1 dk işte 55 sn; 5 dk ve üzeri ile cron ifadeli işlerde en fazla 290 sn). Loglar ~7 gün; ardışık hata eşiğinde e-posta.
Localhost ve özel ağ adreslerine istek gönderilmez. Alternatif araç özeti için cron alternatifleri sayfasına bakın.
Sıkça Sorulan Sorular (SSS)
Zamanlanmış görev ile cron job aynı şey mi?
Zamanlanmış görev genel kavramdır; tüm platformlardaki otomatik zamanlamayı kapsar. Cron job özellikle Linux/Unix cron tablosundaki girdidir. Her cron job bir zamanlanmış görevdir; her zamanlanmış görev cron job değildir.
Hangi platformda hangi aracı kullanmalıyım?
Linux sunucuda cron veya systemd timer; Windows'ta Görev Zamanlayıcı (schtasks); macOS'ta launchd (cron da çalışır); bulutta EventBridge, Cloud Scheduler veya Timer Trigger; container'da Kubernetes CronJob tercih edilir.
Zamanlanmış görevler güvenli mi?
Doğru yapılandırılırsa evet. Şifreyi script içine yazmayın, en az yetkili kullanıcıyla çalıştırın, çıktıyı loglayın ve HTTP tetiklemelerde gizli token ile HTTPS kullanın.
Sunucu erişimim yoksa zamanlanmış görev kurabilir miyim?
İş internetten erişilebilir bir HTTPS URL'sini çağırmaksa evet: cronjob.com.tr gibi dış zamanlayıcı GET/POST isteği gönderir. Yerel dosya yedeği veya localhost servisi için sunucu içi zamanlayıcı gerekir.
Zamanlanmış görev, platformdan bağımsız olarak "doğru işi doğru zamanda otomatik çalıştırma" demektir. Sunucu işleri için yerel zamanlayıcı; yalnızca URL tetikleme için HTTP cron servisi seçin. İfadeleri doğrulamak için cron ifade oluşturucu kullanabilirsiniz.
Hemen Ücretsiz Cron Job Oluşturun
HTTPS URL'lerinizi dakikada bir tetikleyin. cronjob.com.tr ücretsizdir; kayıtta kredi kartı istenmez.
Ücretsiz Başla →