TL;DR
| Konu | 2019 | 2026 |
|---|---|---|
| Altyapı | Sabit sunucu (VPS/Dedicated) | Serverless (Cloudflare, Vercel) |
| Zamanlayıcı | crontab | systemd timers, Inngest, Trigger.dev |
| Hata yönetimi | Manuel (log kontrolü) | Otomatik retry, durable execution |
| Tetikleme | Yalnızca zaman tabanlı | Zaman + olay tabanlı (event-driven) |
| Maliyet | Sabit aylık sunucu | Kullandığın kadar öde |
| AI entegrasyonu | Yok | Heartbeat pattern, MCP cron |
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 etmekte. Her kullanıcı kendi crontab dosyasına sahip olup, sistem geneli görevler /etc/crontab üzerinden yönetilmekte1.
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ü 1.7.2 (Temmuz 2024) olup, aralık/adım değerlerinde doğrulama iyileştirmeleri ve crontab -l çıktısında yorum satırlarının renklendirilmesi gibi yenilikler içermektedir.
systemd Timers: Crontab’ın Modern Alternatifi
systemd tabanlı Linux dağıtımlarında, systemd timer’lar crontab’a göre belirgin avantajlar sunmakta2:
| Ö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ırmakta.
Cloudflare Workers Cron Triggers
Cloudflare’in 300’den fazla lokasyonundaki edge sunucularında çalışan Worker’lar, cron trigger’lar ile belirli aralıklarla tetiklenebilmekte3:
# 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ı | 5 | 250 |
| CPU süresi (< 1 saat aralık) | 30 saniye | 30 saniye |
| CPU süresi (>= 1 saat aralık) | 15 dakika | 15 dakika |
Vercel Cron Jobs
Vercel, Serverless ve Edge Function’ları cron ile tetikleyebilmekte4:
{
"crons": [
{ "path": "/api/daily-digest", "schedule": "0 9 * * *" },
{ "path": "/api/cleanup", "schedule": "0 0 * * 0" }
]
}
| Hobby | Pro | |
|---|---|---|
| Cron sayısı | 100 | 100 |
| Minimum aralık | Günde bir | Dakikada bir |
| Hassasiyet | Saatlik (+/- 59 dk) | Dakika bazlı |
Hobby planında günlük aralıktan daha sık çalışan cron ifadeleri deploy’u başarısız kılmakta.
GitHub Actions as Cron
Basit veri çekme işleri için GitHub Actions’ın schedule tetikleyicisi yaygın biçimde kullanılmakta5:
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, 270’ten fazla AWS servisi ve 6.000’den fazla API operasyonunu hedefleyebilmekte6. Kalıcı ücretsiz katmanda ayda 14 milyon çağrı sunmakta.
Railway Cron
Railway, dashboard üzerinden 5 dakika minimum aralıklı cron yapılandırması sunmakta. Yalnızca UTC desteklemekte ve servisin görevi tamamladıktan sonra çıkış yapması gerekmekte.
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 üstlenmekte7:
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 hala satın almadıysa tetikle” gibi dinamik koşullar
Ücretsiz planda ayda 50.000 fonksiyon çalıştırma, TypeScript, Python ve Go SDK’ları desteklenmekte.
Trigger.dev
Trigger.dev, arka plan görevleri, AI agent’lar ve durable iş akışları için açık kaynak bir platform. En güncel sürümü v4 (Şubat 2026) ile warm start (100-300ms), waitpoint’ler ve çalıştırma önceliklendirmesi sunmakta8:
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ı | ~13.000 | ~4.800 |
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 sunmakta. Ü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 belirgin maliyet tasarrufu sağlamakta10:
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çlarla 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 icin ise Pipedream yazısına göz atabilirsiniz.
Footnotes
- 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 ↩