EMZETT.
Giriş yap

Cron Job (Vercel)

Kısaca: Vercel’in sabit zamanlarda kendiliğinden otomatik olarak çağırdığı bir rota (bir tarayıcının veya kullanıcının ziyaret etmesi yerine) — kimsenin elle tetiklemesi gerekmeyen yinelenen arka plan görevleri için.

Biraz daha ayrıntılı: Vercel’de bir cron işi vercel.json içinde bildirilir (yol + cron biçiminde zamanlama, örneğin her gün belirli bir saatte). Vercel bu rotaya kendisi bir istek gönderir — arkasındaki kod tamamen normal bir API rotasıdır, teknik olarak bir kişinin çağırdığından farklı değildir.

Bizim bağlamımız: Emzett’te /api/ticket-reminder, destek biletlerinde yönetici mesajları 12+ saat yanıtsız kaldığında otomatik hatırlatma e-postaları için bunu kullanır — Michael’ın kendisinin düşünmesine gerek kalmadan günlük çalışır.

Ayrıntılı

Bildirim ve cron sözdizimi

vercel.json içindeki bildirim standart cron sözdizimine uyar (dakika, saat, gün, ay, haftanın günü):

{
  "crons": [
    { "path": "/api/ticket-reminder", "schedule": "0 12 * * *" },
    { "path": "/api/cart-cleanup", "schedule": "0 9 * * *" }
  ]
}

"0 12 * * *" şu demektir: her gün 12:00 UTC. Beş alan (soldan sağa: dakika 0-59, saat 0-23, ayın günü 1-31, ay 1-12, haftanın günü 0-6) * (her değer), listeler (1,15), aralıklar (1-5) ve adım değerleri (*/15 her 15 dakikada bir) ile birleştirilebilir — klasik Unix cron arka plan programıyla aynı sözdizimi; Vercel’in uygulaması mevcut cron bilgisinin doğrudan geçerli olması için bunu bilerek taklit eder.

Cron çağrılarının kimliğini doğrulamak

Önemli bir güvenlik yönü: cron rotası teknik olarak tamamen normal, herkese açık bir API rotası olduğundan, başkaları da ilke olarak onu elle çağırabilir — bu yüzden Vercel gerçek cron çağrılarına özel bir Authorization başlığı (Bearer <CRON_SECRET>) ekler; üçüncü tarafların aynı rotayı istedikleri kadar elle tetiklemesini (örneğin hatırlatma e-postalarını tekrar tekrar göndermek veya işlem süresi/maliyet yaratmak için) önlemek üzere rota bunu sunucu tarafında denetlemelidir:

export async function GET(request: Request) {
  const authHeader = request.headers.get("authorization");
  if (authHeader !== `Bearer ${process.env.CRON_SECRET}`) {
    return new Response("Unauthorized", { status: 401 });
  }
  // gerçek cron mantığı
}

CRON_SECRET normal bir ortam değişkeni olarak ayarlanır ve Vercel tarafından her gerçek cron çağrısıyla otomatik olarak gönderilir.

Zaman aşımları ve yürütme sınırları

Cron rotaları, platformun diğer sunucusuz/edge işlevleriyle aynı işlev zaman aşımı sınırlarına tabidir — yapılandırılmış sınırdan uzun süren bir görev (örneğin bir döngüde çok sayıda e-posta göndermek) zorla sonlandırılır. Daha uzun toplu görevler için cron rotasını yalnızca eşzamansız bir arka plan görevini (örneğin bir kuyruk aracılığıyla) başlatan bir “tetikleyici” olarak kullanmak yaygındır; tüm işi cron isteğinin içinde eşzamanlı yapmak yerine.

Plana göre sınırlar

Ücretsiz Hobby planında cron işlerinin ne sıklıkta çalışabileceği sınırlıdır (örneğin iş başına günde en fazla bir kez) — daha sık aralıklar (her dakika, her saat) için ücretli bir plan gerekir. Ayrıca çoğu plan, proje başına aynı anda yapılandırılabilecek azami cron işi sayısını da sınırlar; bu, birçok yinelenen arka plan görevi olan projeler için önem kazanabilir.

Ayrıca bak: Vercel, Ortam değişkenleri