Web projelerinde düzenli veritabanı temizliği, sitemap güncellemesi, fatura üretimi veya üçüncü taraf API senkronizasyonu gibi periyodik görevlerin aksamadan çalışması gerekir. Ancak özellikle paylaşımlı hosting, cPanel veya sunucusuz (serverless) altyapılarda yerel crontab yapılandırmak her zaman mümkün olmaz. Kısıtlı SSH erişimi, CLI komutlarının yürütme süresi sınırları ve sunucu çöktüğünde cron'un da sessizce durması geliştiricileri harici bir ücretsiz cron job servisi arayışına iter.
Harici bir web cron servisi, sunucu terminaline veya işletim sistemine bağımlı kalmadan belirlediğiniz URL uç noktalarına tanımlı periyotlarla HTTP istekleri gönderir. Bu rehberde, web tabanlı zamanlayıcıların çalışma mantığını, ücretsiz servis seçerken dikkat etmeniz gereken gizli kısıtlamaları, endpoint güvenliğini nasıl sağlayacağınızı ve PHP ile Node.js için çalışan kod örneklerini inceliyoruz. Zamanlama terimlerine yabancıysanız temel kavramları öğrenmek için cron job nedir rehberimizi ziyaret edebilirsiniz.
Ücretsiz Cron Job Servisi Nedir ve Nasıl Çalışır?
Geleneksel Linux crontab servisi, aynı sunucu üzerinde doğrudan kabuk (shell) komutları yürütür. Buna karşılık bulut tabanlı bir web cron servisi, dağıtık sunucu altyapısından uygulamanızın dışarıya açık HTTPS uç noktasına standart HTTP istekleri (GET, POST, PUT, DELETE vb.) gönderen bir zamanlama motorudur.
Çalışma prensibi oldukça yalındır: Belirlediğiniz takvim saati geldiğinde cron servisi URL adresinize istek yapar, dönen HTTP yanıt kodunu (200 OK, 202 Accepted, 500 Internal Error vb.) ve yanıt süresini kaydeder. Örneğin WordPress sitenizdeki wp-cron.php dosyasını ziyaretçi trafiğine bırakmak yerine dışarıdan düzenli tetikleyebilir ya da Laravel uygulamanızdaki /api/cron/run rotasını yetkili bir başlıkla çağırabilirsiniz. Diğer zamanlama yöntemleriyle karşılaştırmak için cron alternatifleri rehberimize göz atabilirsiniz.
Uygulamanız zaten belirli bir platformda çalışıyorsa yerleşik seçenekleri de değerlendirin: Azure Functions Timer Trigger kullanımı işlev kodunu doğrudan zamanlarken Vercel Cron Jobs yapılandırması projenizdeki HTTP rotalarını çağırır. Bağımsız bir web cron servisi ise farklı platformlardaki uç noktaları tek bir zamanlama yaklaşımıyla yönetmenizi sağlar.
Zamanlanan isteğin HTTP 200 dönmesi, arka plandaki iş mantığının eksiksiz tamamlandığını tek başına kanıtlamaz. Yanıt kodu ve yanıt süresiyle uygulamanın ürettiği sonucu birlikte izlemek için cron ve uptime izleme arasındaki farkları göz önünde bulundurun; erişilebilir bir sayfa ile başarıyla tamamlanan görev ayrı kontroller gerektirir.
Yerel Crontab vs Bulut Tabanlı Cron Servisi Karşılaştırması
Yerel sunucuda crontab çalıştırmak ile dışarıdan bulut tabanlı bir zamanlayıcı kullanmak arasındaki operasyonel farklar aşağıdaki tabloda detaylandırılmıştır:
| Özellik ve Kriter | Yerel Crontab (Linux / cPanel) | Bulut Tabanlı Cron Servisi (cronjob.com.tr) |
|---|---|---|
| Kurulum ve Erişim | SSH terminali veya cPanel erişimi gerektirir | Web tarayıcısından panel üzerinden yapılandırılır |
| Sunucu Çöküş Davranışı | Sunucu kapanırsa zamanlayıcı da durur, bildirim vermez | Dış altyapıdan izler; sunucu çökünce e-posta ile uyarır |
| Sunucu Taşıma Kolaylığı | Her yeni sunucuda crontab ayarları baştan yazılır | Zamanlayıcı bağımsızdır; DNS yönlendirmesi yeterlidir |
| Log ve İzlenebilirlik | Sunucudaki metin dosyalarını terminalden inceleme gerekir | Panelde 7 günlük durum kodu, yanıt süresi ve gövde kaydı |
| Zaman Aşımı (Timeout) | PHP CLI ayarları ve sunucu CPU sınırlarına bağlıdır | 55 ila 290 saniye arasında öngörülebilir HTTP bekleme süresi |
| Tekil Hata Ayıklama | Komut satırından parametrelerle test edilmelidir | Panelden tek tıkla anında manuel test çalıştırması |
Ücretsiz Cron Servisi Seçerken Dikkat Edilmesi Gereken 6 Kriter
Piyasada yer alan birçok ücretsiz cron servisi görünüşte cazip gelse de, arka planda uygulamanızın aksamasına neden olabilecek gizli sınırlamalar barındırır. Karar vermeden önce aşağıdaki altı kriteri mutlaka değerlendirmelisiniz:
Minimum Çalışma Aralığı (1 Dakika Hassasiyeti)
Geleneksel ücretsiz cron araçlarının önemli bir bölümü maliyet düşürmek amacıyla en sık çalıştırma aralığını 15 dakika veya saat başı ile sınırlar. Ancak e-ticaret sipariş eşitlemesi, ödeme bildirimleri kontrolü ve anlık mesajlaşma kuyrukları için 1 dakikalık (60 saniye) periyot zorunludur. cronjob.com.tr üzerinde 1 dakikalık minimum çalıştırma aralığı ücretsiz olarak sunulur.
HTTP İstek Zaman Aşımı (Timeout) Süreleri
Birçok servis yanıt süresi 10 veya 15 saniyeyi aştığında bağlantıyı zorla keser (timeout). Eğer periyodik işiniz veritabanında toplu güncelleme yapıyor veya uzak sunucudan büyük bir XML dosyası indiriyorsa erken zaman aşımı nedeniyle istek hata olarak kaydedilir; sunucudaki işlemin durup durmayacağı uygulamanıza bağlıdır.
cronjob.com.tr üzerinde bekleme süresi seçilen aralığa göre esnek olarak belirlenir: aralıktan 5 saniye çıkarılır (en az 5, en fazla 290 saniye). Örneğin 1 dakikalık bir görevde 55 saniye, 2 dakikalık bir görevde 115 saniye, 5 dakika ve üzeri hazır aralıklarda ve 5 alanlı cron ifadeli görevlerde tam 290 saniye yanıt beklenir.
Log ve Geçmiş Kayıt Tutma Süresi
Görevinizin başarılı olup olmadığını, kaç milisaniyede yanıt verdiğini ve hata anında sunucunuzun hangi JSON veya HTML hata çıktısını döndüğünü görebilmelisiniz. Kayıt tutmayan bir servis sessiz hataları gizler. cronjob.com.tr her çalıştırma için HTTP durum kodunu, yanıt süresini, hata mesajını ve yanıt gövdesinin ilk ~64 KB'lık kısmını 7 gün boyunca loglarda saklar.
Özel Başlıklar (Custom Headers) ve Yetkilendirme Desteği
Herkese açık bir URL'yi yetkilendirme olmadan çağırmak büyük bir güvenlik açığıdır. Servisinizin Authorization: Bearer <token> veya özel X-Cron-Secret-Key gibi başlıkları desteklemesi, JSON verisi gönderebilmek için Content-Type: application/json tanımlayabilmesi şarttır.
Kapsamlı HTTP Metot Desteği (POST, PUT, DELETE)
Zamanlanmış bir görevin veri değiştiren bir iş için GET ile çalıştırılması HTTP'nin güvenli metot ilkesiyle uyuşmaz. Veri tabanında kayıt güncelleyen veya işlem başlatan uç noktalar POST, PUT veya PATCH metotları beklemelidir. cronjob.com.tr GET, POST, PUT, PATCH, DELETE, HEAD ve OPTIONS metotlarını destekler.
E-posta Tabanlı Kesinti ve Düzelme Bildirimleri
Uygulamanız veritabanı kilitlenmesi veya bellek yetersizliği nedeniyle HTTP 500 döndüğünde anında haberdar olmalısınız. cronjob.com.tr üzerinde ardışık hata eşiği (varsayılan 3, 1–20 arasında yapılandırılabilir) aşıldığında kayıtlı e-posta adresinize erişim sorunu uyarısı gönderilir. Sorun giderildiğinde ise toplam kesinti süresiyle birlikte düzeldi e-postası iletilir. Aynı iş için bildirimler arasında en az 60 dakika bulunur.
Güvenlik Yapılandırması: Webhook Endpoint'lerinizi Nasıl Korursunuz?
Web tabanlı cron kullandığınızda endpoint'iniz internete açık hale gelir. Kötü niyetli kişilerin bu URL'yi rastgele ziyaret ederek arka plan işlerini sürekli tetiklemesini (DoS saldırısı veya mükerrer veri işleme) engellemek için üç katmanlı güvenlik uygulamanız önerilir:
- Gizli Başlık Doğrulaması (Secret Header): İstek başlığına uzun, tahmin edilemez bir token tanımlayın. Sunucunuz gelen başlığı ortam değişkenindeki anahtarla zamanlama saldırılarına dayanıklı (timing-attack safe) biçimde karşılaştırsın. Detaylı önlemler için cron job güvenliği rehberimizi inceleyin.
- User-Agent Kontrolü: cronjob.com.tr tüm isteklerinde
CronJobComTr/1.0 (+https://cronjob.com.tr)kullanıcı aracısını gönderir. Uygulamanızda bu User-Agent değerini doğrulamak basit bot taramalarını engeller. - İşlem Idempotency Güvencesi: Bir görev iki kez art arda tetiklense bile veritabanında çift kayıt oluşturmayacak şekilde işlem kimlikleri (UUID veya tarih bazlı benzersiz anahtarlar) kullanın.
cronjob.com.tr ile 3 Adımda Ücretsiz Cron Job Kurulumu
Uygulamanız için harici bir web cron işi kurmak yalnızca birkaç dakikanızı alır:
- Hesabınızı Açın: cronjob.com.tr web sitesinden ücretsiz kaydolun. Kayıt işlemi için kredi kartı bilgisi istenmez.
- Görevinizi Tanımlayın: Kontrol panelinde 'Yeni İş Ekle' butonuna tıklayın. Uç noktanızın HTTPS adresini girin, HTTP metodunu (örneğin POST) seçin, gizli yetkilendirme başlığınızı ekleyin ve çalıştırma periyodunu (hazır aralıklar veya beş alanlı cron ifadeleri ile) belirleyin.
- Test Edin ve Etkinleştirin: Görevi kaydedip manuel çalıştırarak uç noktanızın HTTP 200 veya 202 döndürdüğünü doğrulayın. Ardından zamanlamayı etkinleştirin.
Gerçek Kod Örnekleri
Aşağıda web cron isteklerini güvenli biçimde karşılayıp doğrulayan iki uyarlanabilir örnek sunulmuştur:
1. PHP Uç Nokta Güvenlik Kontrolü:
<?php
// cron-handler.php: X-Cron-Secret-Key ve User-Agent dogrulamasi
header('Content-Type: application/json; charset=utf-8');
$expectedSecret = getenv('CRON_SECRET_TOKEN') ?: 'cok_gizli_token_degeri_98765';
$clientSecret = $_SERVER['HTTP_X_CRON_SECRET_KEY'] ?? '';
$userAgent = $_SERVER['HTTP_USER_AGENT'] ?? '';
// 1. Gizli baslik kontrolu (Timing attack safe)
if (!hash_equals($expectedSecret, $clientSecret)) {
http_response_code(403);
echo json_encode(['error' => 'Yetkisiz istek: Gecersiz gizli anahtar']);
exit;
}
// 2. cronjob.com.tr User-Agent kontrolu
if (strpos($userAgent, 'CronJobComTr') === false) {
http_response_code(403);
echo json_encode(['error' => 'Yetkisiz istek: Beklenmeyen istemci']);
exit;
}
// 3. Zamanlanmis gorev mantigi
try {
// Ornek: Eski verileri temizle veya kuyrugu isle
http_response_code(200);
echo json_encode(['status' => 'success', 'executed_at' => date('c')]);
} catch (Exception $e) {
http_response_code(500);
echo json_encode(['error' => 'Islem sirasinda hata olustu']);
}
2. Node.js (Express) Güvenlik Ara Katmanı (Middleware):
// server.js: Express.js Bearer token ve User-Agent dogrulamasi
const express = require('express');
const { timingSafeEqual } = require('node:crypto');
const app = express();
const EXPECTED_TOKEN = process.env.CRON_BEARER_TOKEN || 'ornek_guvenli_bearer_token';
function cronAuthMiddleware(req, res, next) {
const authHeader = req.headers['authorization'];
const userAgent = req.headers['user-agent'] || '';
// RFC 6750 standardina gore Bearer token dogrulamasi
if (!authHeader || !authHeader.startsWith('Bearer ')) {
return res.status(401).json({ error: 'Yetkilendirme basligi eksik' });
}
const token = authHeader.split(' ')[1];
const received = Buffer.from(token || '');
const expected = Buffer.from(EXPECTED_TOKEN);
if (received.length !== expected.length || !timingSafeEqual(received, expected)) {
return res.status(403).json({ error: 'Gecersiz erisim tokeni' });
}
if (!userAgent.includes('CronJobComTr')) {
return res.status(403).json({ error: 'Gecersiz User-Agent' });
}
next();
}
app.post('/api/cron/process-queue', cronAuthMiddleware, (req, res) => {
// Zamanlanmis gorev basariyla dogrulandi
res.status(200).json({ status: 'success', message: 'Kuyruk islendi' });
});
app.listen(3000, () => console.log('Sunucu calisiyor: Port 3000'));
Sık Karşılaşılan Hatalar ve Çözümleri
Web cron kurulumlarında en sık karşılaşılan dört hata ve bunların operasyonel çözümleri şunlardır:
1. HTTP 504 Gateway Timeout
Nedeni: Bir ağ geçidi veya ters vekil, arka uçtan kendi bekleme süresi içinde yanıt alamamıştır. Cron servisinin kendi zaman aşımı ise HTTP 504 yanıtından ayrı bir bağlantı hatası olarak kaydedilebilir.
Çözümü: Ağır işleri doğrudan HTTP isteği içerisinde senkronize çalıştırmayın. Uç noktanız görevi bir arka plan mesaj kuyruğuna (Redis, RabbitMQ) eklesin ve anında HTTP 202 Accepted yanıtı dönsün. Böylece HTTP isteği işin tamamlanmasını beklemeden kısa sürede yanıtlanabilir.
2. HTTP 403 Forbidden ve CSRF Engeli
Nedeni: Laravel, Django veya Rails gibi web çatıları POST isteklerinde varsayılan olarak CSRF (Cross-Site Request Forgery) token'ı zorunlu tutar. Harici cron servisi tarayıcı oturumuna sahip olmadığı için istek güvenlik duvarı veya CSRF filtresi tarafından 403 ile reddedilir.
Çözümü: Zamanlanmış görevi karşılayan API rotasını web framework'ünüzün CSRF koruma listesinden muaf tutun (örneğin Laravel'de bootstrap/app.php veya VerifyCsrfToken ara katmanında rotayı hariç bırakın). Güvenliği CSRF yerine yukarıda örneklendirdiğimiz Authorization: Bearer veya özel başlık ile sağlayın.
3. SSL Handshake Failed ve Sertifika Hataları
Nedeni: cronjob.com.tr kurumsal güvenlik standartları gereği HTTPS bağlantılarında TLS sertifikalarını doğrular. Sunucunuzda kurulu SSL sertifikasının süresi dolmuşsa, alan adıyla eşleşmiyorsa veya ara sertifika zinciri (CA bundle / fullchain.pem) eksik yapılandırılmışsa bağlantı kurulamaz.
Çözümü: Let's Encrypt veya ticari SSL sertifikanızı güncelleyin. Web sunucunuzda sadece cert.pem yerine sunucu sertifikası ve ara sertifikaları içeren fullchain.pem dosyasının tanımlandığından emin olun.
4. Ücretsiz Servisin İnaktif Hesapları Dondurması
Nedeni: Eski nesil ücretsiz cron sağlayıcılarının birçoğu, 30 gün boyunca kullanıcı web paneline giriş yapmadığında tanımlı görevleri sessizce devre dışı bırakır veya hesabı siler. Bu durum kritik üretim görevlerinin habersizce durmasına yol açar.
Çözümü: Servis seçerken güncel hesap etkinliği ve saklama koşullarını kontrol edin. cronjob.com.tr ücretsiz HTTP zamanlama ve 7 günlük çalışma kaydı sunar.
Sıkça Sorulan Sorular (SSS)
Ücretsiz planda 1 dakikalık görev kurulabilir mi?
Evet, cronjob.com.tr üzerinde 1 dakikalık (60 saniye) görevler ücretsiz olarak desteklenir ve herhangi bir kredi kartı bilgisi talep edilmez.
Görev başarısız olursa nasıl bildirim alırım?
Ardışık hata eşiği (varsayılan 3) aşıldığında e-posta ile bildirim alırsınız; servis düzeldiğinde kesinti süresiyle birlikte düzeldi e-postası iletilir.
Cron servisi hangi HTTP metotlarını destekler?
GET, POST, PUT, PATCH, DELETE, HEAD ve OPTIONS dahil olmak üzere bu HTTP metotları desteklenir.
Paylaşımlı hosting (cPanel) sitelerinde harici cron kullanılabilir mi?
Evet, internetten erişilebilen bir HTTP uç noktası varsa harici cron kullanılabilir. Yerel crontab veya CLI erişimi gerekmez; hostingin web isteği süre ve kaynak sınırları geçerli kalır.
Hemen Ücretsiz Cron Job Oluşturun
Kredi kartı gerekmeden ücretsiz hesabınızı açın, HTTP isteklerinizi güvenle zamanlayın.
Ücretsiz Başla →