Bu yazının ilk versiyonu 2019 yılında yayınlanmıştı. O tarihten bu yana cron job dünyası, “bir sunucuda Linux terminaline girip crontab -e yazmak” noktasından, tamamen serverless, event-driven ve stateful bir yapıya evrildi. 2026 itibarıyla cron artık işletim sisteminin bir parçası değil, bulut mimarisinin bir orkestrasyon aracıdır.
Crontab Temelleri
Cron, Unix temelli sistemlerde (Linux, macOS, BSD) zamanlanmış görevleri yöneten daemon’dur. crontab ise bu görevlerin tanımlandığı dosya ve komutu ifade eder. Her kullanıcı kendi crontab dosyasına sahip olup, sistem geneli görevler /etc/crontab üzerinden yönetilir1.
Zaman İfadesi Sözdizimi
* * * * * [komut-veya-script]
┬ ┬ ┬ ┬ ┬
│ │ │ │ └───── haftanın günü (0-6, 0=Pazar)
│ │ │ └────────── ay (1-12)
│ │ └─────────────── gün (1-31)
│ └──────────────────── saat (0-23)
└───────────────────────── dakika (0-59)
Temel İşlemler
# Görev listesini görüntüle
crontab -l
# Görev düzenle (varsayılan editör ile)
crontab -e
# nano ile düzenle (tek seferlik)
env EDITOR=nano crontab -e
# Tüm görevleri sil (dikkatli kullan)
crontab -r
Sık Kullanılan Zaman İfadeleri
| İfade | Açıklama |
|---|---|
* * * * * | Her dakika |
0 * * * * | Her saat başı |
0 9 * * * | Her gün saat 09:00 |
0 9 * * 1-5 | Hafta içi her gün 09:00 |
0 0 1 * * | Her ayın ilk günü gece yarısı |
*/15 * * * * | Her 15 dakikada bir |
0 9,18 * * * | Her gün 09:00 ve 18:00 |
Kısayol İfadeleri
| Kısayol | Karşılık | Açıklama |
|---|---|---|
@reboot | - | Sistem başlangıcında bir kez |
@hourly | 0 * * * * | Saatte bir |
@daily | 0 0 * * * | Günde bir |
@weekly | 0 0 * * 0 | Haftada bir |
@monthly | 0 0 1 * * | Ayda bir |
@yearly | 0 0 1 1 * | Yılda bir |
Basit Bir Örnek
Her dakika rastgele bir sayı üreten ve dosyaya yazan bir görev:
# random.sh oluştur
cat > ~/random.sh << 'SCRIPT'
#!/bin/bash
NUMBER=$[ ( $RANDOM % 100 ) + 1 ] && echo $NUMBER >> ~/number.log
SCRIPT
chmod +x ~/random.sh
# Crontab'a ekle
crontab -e
# Eklenecek satır:
* * * * * ~/random.sh
cronie (en yaygın cron daemon) en güncel sürümü, GitHub release sayfasındaki kayda göre 1.7.2 (1 Temmuz 2024). Bu minör sürüm 1.7.0’da çıkan bir regresyonu kapatıyor ve SAST taramasında bulunan bellek sızıntılarını yamalıyor.
systemd Timers: Crontab’ın Modern Alternatifi
systemd tabanlı Linux dağıtımlarında, systemd timer’lar crontab’a göre belirgin avantajlar sunar2:
| Özellik | crontab | systemd Timers |
|---|---|---|
| Kurulum | Tek satır | İki birim dosyası (service + timer) |
| Loglama | Sınırlı (mail, syslog) | Tam journald entegrasyonu |
| Kaçırılan görevler | Sessizce atlanır | Persistent=true ile yakalanır |
| Çakışma önleme | Yok (yeni instance başlar) | Tek instance garantisi |
| Bağımlılıklar | Yok | Ağ, disk, diğer servislere bağımlılık |
| Kaynak kontrolü | Yok | cgroups (CPU, bellek limiti) |
| Taşınabilirlik | BSD, macOS, tüm Unix | Yalnızca systemd Linux |
systemd Timer Örneği
# /etc/systemd/system/yedekleme.service
[Unit]
Description=Gunluk Yedekleme
[Service]
Type=oneshot
ExecStart=/opt/scripts/yedekleme.sh
# /etc/systemd/system/yedekleme.timer
[Unit]
Description=Gunluk Yedekleme Zamanlayici
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
# Aktifleştir ve başlat
systemctl enable --now yedekleme.timer
# Durumu kontrol et
systemctl list-timers
journalctl -u yedekleme.service
Ne zaman hangisi? Basit zamanlamalar, macOS/BSD ortamları ve hızlı tek satırlık görevler için crontab; üretim sunucularında loglama, bağımlılık yönetimi ve kaynak kontrolü gereken görevler için systemd timers.
Klasik Cron’dan Cloud-Native Cron’a
2019’da zamanlanmış görev çalıştırmak, sabit bir sunucunun (EC2, Droplet vb.) ayakta kalmasını gerektiriyordu. 2026’da ise sunucusuz (serverless) platformlar, yalnızca çalışma süresi kadar ücretlendirme yaparak bu ihtiyacı ortadan kaldırır.
Cloudflare Workers Cron Triggers
Cloudflare’in resmi network sayfasına göre 330’dan fazla şehirdeki edge sunucularında çalışan Worker’lar, cron trigger’lar ile belirli aralıklarla tetiklenebilir3:
# wrangler.toml
[triggers]
crons = ["0 3 * * *", "*/30 * * * *"]
export default {
async scheduled(controller, env, ctx) {
ctx.waitUntil(async () => {
// E-ticaret verilerini çek ve işle
const data = await env.DB.prepare("SELECT * FROM orders WHERE date = ?")
.bind(today())
.all();
await processOrders(data);
});
},
};
| Ücretsiz | Ücretli ($5/ay) | |
|---|---|---|
| Trigger sayısı (hesap başına) | 5 | 250 |
| CPU süresi (scheduled handler) | 10 ms | 30 saniye (< 1 saat aralık) / 15 dakika (>= 1 saat aralık) |
CF dokümantasyonu ücretsiz planda scheduled handler için CPU süresini 10 milisaniye olarak veriyor; uzun süren cron işleri için Paid plan zorunlu.
Vercel Cron Jobs
Vercel, Serverless ve Edge Function’ları cron ile tetikleyebilir4:
{
"crons": [
{ "path": "/api/daily-digest", "schedule": "0 9 * * *" },
{ "path": "/api/cleanup", "schedule": "0 0 * * 0" }
]
}
| Hobby | Pro | |
|---|---|---|
| Cron sayısı (proje başına) | 100 | 100 |
| Cron sayısı (team başına) | 2 | 40 |
| Minimum aralık | Günde bir | Dakikada bir |
| Execution timeout | 10 sn | 300 sn |
Hobby planında günlük aralıktan daha sık çalışan cron ifadeleri deploy başarısız olur. Proje başına 100 cron limiti tüm planlarda aynı; gerçek darboğaz team-bazlı toplam limit (Hobby 2, Pro 40).
GitHub Actions as Cron
Basit veri çekme işleri için GitHub Actions’ın schedule tetikleyicisi yaygın biçimde kullanılır5:
on:
schedule:
- cron: "0 */6 * * *" # Her 6 saatte bir
jobs:
veri-cek:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: python scripts/veri_cek.py
Ancak dikkat edilmesi gereken sınırlamalar mevcut: minimum 5 dakika aralık, yoğun saatlerde gecikme veya atlama riski, ve halka açık depolarda 60 gün aktivite yoksa otomatik devre dışı bırakma. Public depolarda tamamen ücretsiz, private depolarda ayda 2.000 dakika ücretsiz süre sunulmakta.
AWS EventBridge Scheduler
CloudWatch Events’in halefi olan EventBridge Scheduler, AWS resmi sayfasına göre 200’den fazla AWS servisi ve 6.000’den fazla API operasyonunu hedefleyebilir6. Kalıcı ücretsiz katmanda ayda 14 milyon çağrı sunar; bu free tier süresiz ve tüm bölgeler arasında ortak.
Railway Cron
Railway, dashboard üzerinden 5 dakika minimum aralıklı cron yapılandırması sunar. Yalnızca UTC destekler ve servisin görevi tamamladıktan sonra çıkış yapması gerekir.
Karşılaştırma Tablosu
| Platform | Min. Aralık | Ücretsiz Katman | Retry | Durable | Yapılandırma |
|---|---|---|---|---|---|
| crontab | 1 dakika | N/A (OS) | Yok | Yok | crontab |
| systemd timers | 1 saniye | N/A (OS) | Yok | Persistent | Unit dosyaları |
| CF Workers Cron | 1 dakika | 5 trigger, 100k istek/gün | Yok | Yok | wrangler.toml |
| Vercel Cron | 1 dk (Pro), 1/gün (Hobby) | 100 cron | Yok | Yok | vercel.json |
| GitHub Actions | 5 dakika | 2k dk/ay (private) | Yok | Yok | YAML |
| EventBridge | 1 dakika | 14M çağrı/ay | Yapılandırılabilir | Yok | Console/SDK |
| Railway | 5 dakika | Plan dahili | Yok | Yok | Dashboard |
Stateful ve Reliable Scheduling
2019’da cron job hata verdiğinde, o iş sessizce ölürdü. Modern platformlar bunu değiştirdi.
Inngest
Inngest, olay güdümlü (event-driven) durable execution platformudur. Fonksiyonları cron, olay veya webhook ile tetikleyebilmekte; kuyruk, durum, yeniden deneme ve zamanlama yönetimini tamamen üstlenir7:
import { inngest } from "./client";
export const haftalikRapor = inngest.createFunction(
{ id: "haftalik-rapor" },
{ cron: "TZ=Europe/Istanbul 0 9 * * 1" },
async ({ step }) => {
const veriler = await step.run("veri-cek", async () => {
return db.orders.findAll({ lastWeek: true });
});
const analiz = await step.run("ai-analiz", async () => {
return llm.analyze(veriler, "Haftalık satış trendlerini özetle");
});
await step.run("bildirim-gonder", async () => {
await slack.send("#raporlar", analiz);
});
},
);
Inngest’in geleneksel cron’dan temel farkları:
- Durable execution: Her
step.run()sonucu saklanır; hata durumunda yalnızca başarısız adım yeniden çalıştırılır - Otomatik retry: Varsayılan 4 yeniden deneme, eksponansiyel geri çekilme (backoff) ile
- Saat dilimi desteği:
TZ=Europe/Istanbulile doğrudan cron ifadesinde - Olay + zaman hibrit: “Kullanıcı sepete ürün ekledikten 2 saat sonra hâlâ satın almadıysa tetikle” gibi dinamik koşullar
Inngest dokümantasyonuna göre ücretsiz plan ayda 50.000 fonksiyon çalıştırma hakkı veriyor; TypeScript, Python ve Go SDK’ları resmi olarak destekleniyor.
Trigger.dev
Trigger.dev, arka plan görevleri, AI agent’lar ve durable iş akışları için açık kaynak bir platformdur. v4 sürümü 18 Ağustos 2025’te GA olarak yayınlandı (Launchweek 2 duyurusu); warm start (100-300ms), waitpoint’ler ve çalıştırma önceliklendirmesi getiriyor8:
export const gunlukTemizlik = schedules.task({
id: "gunluk-temizlik",
cron: "0 3 * * *",
run: async (payload) => {
await temizlikYap();
},
});
| Trigger.dev | Inngest | |
|---|---|---|
| Mimari | Yönetilen worker’lar kodunuzu çalıştırır | Event-driven, HTTP endpoint’lerinizi çağırır |
| Dil desteği | TypeScript | TypeScript, Python, Go |
| Warm start | Evet (v4) | N/A (serverless) |
| GitHub yıldızı (2026-05) | ~15.100 | ~5.400 |
Upstash QStash
QStash, serverless HTTP tabanlı mesaj kuyruğu ve görev zamanlayıcıdır9. Hedef URL’ye HTTP isteği göndererek çalışır; yeniden deneme, dead letter queue ve zamanlama desteği sunar. Ücretsiz planda günde 1.000 mesaj ve 10 aktif zamanlama.
AI Agent’lar ve Zamanlanmış Görevler
Cron job’lar, 2019’da “zamanı gelince bir script çalıştıran” basit tetikleyicilerdi. 2026’da ise AI agent’ların yaşam döngüsünü yöneten bir heartbeat mekanizması haline geldi.
Heartbeat Pattern
Agent sürekli çalışmak yerine, cron tarafından belirli aralıklarla uyandırılır, görevini yapar ve tekrar uyur. Bu yaklaşım, idle compute oranına bağlı olarak belirgin maliyet tasarrufu sağlayabilir10:
Her saat başı (cron) -> Agent uyanır -> Veriyi analiz eder -> Rapor gönderir -> Agent uyur
Sürekli çalışan agent: 7/24 compute maliyeti, boşta bekleme. Zamanlanmış agent: Yalnızca çalışma süresi kadar maliyet. Toplu (batch) ve periyodik işler için ideal.
MCP ve Cron Entegrasyonu
Anthropic tarafından standartlaştırılan ve Aralık 2025’te Linux Foundation altındaki Agentic AI Foundation’a (AAIF) devredilen MCP (Model Context Protocol), AI modellerinin yerel dosyalar, veritabanları ve araçlar ile iletişim kurmasını sağlamakta.
Modern kullanımda bir cron job artık yalnızca Python script’i çalıştırmıyor; bir MCP sunucusunu tetikleyerek AI agent’ı belirli bir bağlam (context) ile uyandırmakta:
Cron (her gece 00:00)
-> MCP üzerinden veritabanına bağlan
-> Son 24 saatin satış verilerini çek
-> LLM'e context olarak gönder
-> "Anormallikleri bul" komutu ver
-> Sonucu Slack'e raporla
Bu amaçla geliştirilmiş MCP sunucuları mevcut: mcp-cron, shell komutu veya AI prompt görevlerini cron ifadeleriyle zamanlayabilmekte11. scheduler-mcp ise shell komutları, API çağrıları ve AI görevlerini cron, aralık ve tarih tabanlı tetikleyicilerle yönetebilmekte.
Olay + Zaman Hibrit Tetikleme
Artık yalnızca “Cuma günü çalış” değil, koşullu tetikleme de mümkün:
"Stok %10'un altına düşerse (olay)
VE saat 18:00'den sonraysa (zaman koşulu)
-> AI satın alma agent'ını çalıştır"
Inngest ve Trigger.dev bu tür hibrit yapıları doğrudan desteklemekte. Agent, olay gerçekleştiğinde tetiklenir ancak zaman koşulu da sağlanmalıdır.
Semantic Cron: Veri Analitiğinde Yeni Yaklaşım
Modern cron iş akışları, veriyi yalnızca taşımak yerine taşıma sırasında işlemekte:
- LLM tabanlı veri temizliği: Cron ile çekilen verideki eksik kategori isimlerini AI ile tahmin edip tabloya ekleme
- Otomatik hipotez testi: Her hafta e-ticaret verilerini pivot table yapıp, “Geçen haftaya göre neden bu kategoride düşüş var?” sorusunu AI agent’a sorarak hipotez üretme
- Token optimizasyonu: Ham veri yerine pivot edilmiş ve flag eklenmiş özet tabloları AI’a göndererek maliyet düşürme ve doğruluk artırma
Kimlik ve Yetkilendirme Bağlamı
Clerk, Auth0 gibi kimlik yönetim platformları, cron işlemleriyle webhook’lar üzerinden bağlanmakta:
- Kullanıcı bakımı: “30 gündür giriş yapmayan kullanıcıları pasife al” gibi görevler, Clerk webhook’ları ile tetiklenen zamanlanmış fonksiyonlarla yönetilmekte
- Abonelik yönetimi: Stripe veya Paddle gibi ödeme sistemleriyle senkronizasyon, edge servisler üzerinden periyodik görevlerle gerçekleştirilmekte
- Token yenileme: API token’larının periyodik yenilenmesi ve sertifika rotasyonu
Oyun ve Gerçek Zamanlı Sistemlerde Cron
Cron job’lar yalnızca veri analitiği ve DevOps alanında değil, oyun ve gerçek zamanlı sistemlerde de kullanılmakta:
- Enerji dolumu: Oyun içi enerji sistemlerinin belirli aralıklarla yenilenmesi
- Günlük ödüller: Her gün sıfırlanan ödül mekanizmaları
- Ekonomi dengelemesi: Oyun içi ekonomi parametrelerinin periyodik güncellenmesi
- Sıralama güncellemesi: Liderlik tablolarının belirli aralıklarla yeniden hesaplanması
Bu görevler artık merkezi bir sunucu saati yerine, global olarak dağıtılmış cron trigger’lar (Cloudflare Workers, AWS EventBridge) ile yönetilmekte.
2026 Best Practice Rehberi
Basit Görev (Klasik Cron)
# Her gece 03:00'te yedekleme
0 3 * * * /opt/scripts/yedekleme.sh >> /var/log/yedekleme.log 2>&1
Güvenilir Görev (Inngest)
inngest.createFunction(
{ id: "gece-yedekleme", retries: 5 },
{ cron: "TZ=Europe/Istanbul 0 3 * * *" },
async ({ step }) => {
await step.run("yedekle", yedekleVeDogrula);
await step.run("bildir", () => slack.send("Yedekleme tamamlandı"));
},
);
Edge Cron (Cloudflare Workers)
# wrangler.toml
[triggers]
crons = ["0 */6 * * *"]
Senaryo Bazlı Tercih
| Senaryo | Önerilen Platform | Neden |
|---|---|---|
| Basit script, VPS | crontab | Ek bağımlılık yok |
| Üretim sunucusu, Linux | systemd timers | Loglama, kaynak kontrolü |
| Serverless, düşük maliyet | Cloudflare Workers Cron | Edge, kullandığın kadar öde |
| Hata toleransı gereken iş akışı | Inngest / Trigger.dev | Durable execution, retry |
| Basit veri çekme, ücretsiz | GitHub Actions | Public repo’da ücretsiz |
| AWS ekosistemi | EventBridge Scheduler | 14M/ay ücretsiz |
| AI agent heartbeat | Inngest + MCP | Olay + zaman, durable |
| E-ticaret rapor pipeline | Inngest | Adım bazlı, retry, Slack entegrasyonu |
Sonuç
Cron, Unix felsefesinin temel taşlarından biri olarak “zamanı geldiğinde çalıştır” ilkesiyle onlarca yıldır görev yapmakta. Ancak modern geliştirme iş akışlarında bu basit mekanizma, serverless platformlar (Cloudflare Workers, Vercel), durable execution araçları (Inngest, Trigger.dev) ve event-driven mimarilerle zenginleştirilmiş durumda.
AI agent’ların yaygınlaşmasıyla birlikte cron, bir zamanlayıcı olmaktan çıkıp otonom agent’ların vites kutusuna dönüştü. MCP sunucuları ile entegre cron görevleri, agent’lara veritabanı ve dosya erişimi bağlamı sağlayarak veriyi analiz etme, hipotez üretme ve aksiyon alma döngüsünü otomatikleştirmekte.
2019’da cron bir zamanlayıcıydı; 2026’da ise bulut mimarisinin bir orkestrasyon aracıdır.
Cron ile sıkça birlikte kullanılan araçlar hakkında rsync, wget ve grep yazılarına, modern otomasyon alternatifleri için ise Pipedream yazısına göz atabilirsiniz.
VPS crontab'tan serverless durable execution mimarisine geçiş, Inngest/Trigger.dev tasarımı, AI agent heartbeat entegrasyonu ve CF Workers Cron migrasyon planı. Mağazanıza özel mimari değerlendirmesi.
İletişime GeçinFootnotes
- cronie - Cron Daemon ↩
- Linux Task Scheduling: cron vs systemd timers ↩
- Cloudflare Workers Cron Triggers ↩
- Vercel Cron Jobs ↩
- GitHub Actions - Scheduled Events ↩
- AWS EventBridge Scheduler ↩
- Inngest - Scheduled Functions ↩
- Trigger.dev v4 ↩
- Upstash QStash ↩
- Ambient Agents and Always-On Intelligence ↩
- mcp-cron - MCP Server for Scheduled Tasks ↩
- 01 Cron job'lar sunucu bağımlı yapıdan serverless ve event-driven mimariye evrildi
- 02 systemd timer'lar üretim ortamlarında crontab'a göre log, kaynak kontrolü ve bağımlılık yönetimi avantajı sunmakta
- 03 Inngest ve Trigger.dev, durable execution ile hata toleranslı zamanlanmış iş akışları sağlamakta
- 04 AI agent'lar için cron, heartbeat pattern ile maliyet optimizasyonu aracı haline geldi
- 05 Cloudflare Workers Cron Triggers ücretsiz planda 5, ücretli planda 250 trigger desteklemekte
+ systemd timer ile crontab arasındaki fark nedir?
crontab tek satırlık basit zamanlama sunarken, systemd timer'lar journald ile tam log entegrasyonu, Persistent=true ile kaçırılan görevleri yakalama, cgroups ile kaynak kontrolü ve diğer servis birimlerine bağımlılık tanımlama imkanı sunmaktadır. Ancak systemd yalnızca Linux'ta çalışırken, crontab BSD, macOS ve tüm Unix sistemlerinde kullanılabilmektedir.
+ Serverless cron nedir ve neden tercih edilmeli?
Serverless cron, sabit bir sunucu gerektirmeden zamanlanmış görevleri çalıştıran bulut hizmetleridir. Cloudflare Workers Cron Triggers, Vercel Cron Jobs ve AWS EventBridge gibi platformlar, yalnızca çalışma süresi kadar ücretlendirme yapmakta ve altyapı yönetimi gerektirmemektedir. Sabit sunucu maliyeti yerine kullandığın kadar öde modeli sunmaktadırlar.
+ Inngest ve Trigger.dev geleneksel cron'dan nasıl farklı?
Geleneksel cron bir komutu tetikler ve hata durumunda sessizce başarısız olur. Inngest ve Trigger.dev ise durable execution sunmaktadır: her adımın sonucu saklanır, hata durumunda otomatik yeniden deneme yapılır ve iş akışı kaldığı yerden devam eder. Ayrıca zaman tabanlı tetiklemenin yanı sıra olay tabanlı (event-driven) tetikleme de desteklenmektedir.
+ AI agent'lar cron job'ları nasıl kullanıyor?
Heartbeat pattern ile AI agent'lar belirli aralıklarla (örneğin her saat başı) cron tarafından uyandırılır, veriyi analiz eder ve tekrar uyur. Bu yaklaşım, sürekli çalışan agent'lara göre belirgin maliyet tasarrufu sağlamaktadır. MCP sunucuları cron ile tetiklenerek agent'lara veritabanı ve dosya erişimi bağlamı (context) sağlanabilmekte.