⏰ Blog Cron Otomasyonu

📅 Tarih: 2025-11-17 01:45 | 🎯 Tenant: ixtif.com | 👤 Talep: Her saat başı otomatik blog üretimi

🎯 Sistem Hedefi

✅ Ana Amaç

Her saat başı otomatik olarak 1 adet blog yazısı üretilecek. Sistem kendi kendini yönetecek - draft biterse otomatik yeniden üretecek.

1
Saat Başı Blog
24
Günlük Blog
720
Aylık Blog
100
Otomatik Draft

🔄 Sistem Akış Mantığı

1
Cron Job Tetiklenir
Her saat başı Laravel scheduler çalışır
2
Draft Kontrolü
Sistemde kaç adet hazır draft var?
3
Karar Noktası
• Eğer draft sayısı > 1 → Rastgele draft seç, blog üret
• Eğer draft sayısı = 1 (son draft) → Blog üret + 100 yeni draft üret
• Eğer draft sayısı = 0 → Önce 100 draft üret, sonra blog üret
4
Queue Job Tetiklenir
Blog üretim işlemi arka planda başlar (GenerateBlogFromDraftJob)
5
Otomatik Draft Üretimi (İsteğe Bağlı)
Eğer son draft kullanıldıysa, 100 yeni draft üretimi de tetiklenir (GenerateDraftsJob)
6
Log & Monitoring
İşlem kaydedilir, başarı/hata durumu loglanır

🎯 Yapılacaklar

1. Artisan Console Command Oluşturma Yüksek Öncelik

Console Command (Laravel'de terminal komutları için kullanılan sınıf) oluşturacağız. Bu komut cron job tarafından her saat başı çalıştırılacak.

Dosya: app/Console/Commands/GenerateHourlyBlog.php

Görevler:

  • Command imzası tanımla (generate:hourly-blog)
  • Draft sayısını kontrol et
  • Rastgele draft seçim mantığı
  • Queue job tetikleme
  • Log kayıt sistemi

2. Draft Kontrol Mantığı Yüksek Öncelik

Sistemde kaç draft olduğunu kontrol edip, akıllı karar verme mekanizması.

Senaryolar:

  • Durum 1: Draft sayısı > 1 → Sadece blog üret
  • Durum 2: Draft sayısı = 1 (son) → Blog üret + 100 yeni draft üret
  • Durum 3: Draft sayısı = 0 → Önce 100 draft üret, bekle, sonra blog üret

Beklenen Sonuç: Sistem asla draft'sız kalmayacak, sürekli hazır içerik havuzu olacak.

3. Kernel.php Schedule Ayarı Yüksek Öncelik

Task Scheduling (Laravel'in built-in cron sistemi) kullanarak her saat başı komutumuzu otomatik çalıştıracağız.

Dosya: app/Console/Kernel.php

Yapılacak:

  • Schedule metoduna komut ekle
  • Hourly (her saat başı) olarak ayarla
  • Overlap (çakışma) önleme ekle
  • Timeout ayarı (maximum 10 dakika)
  • Email notification (hata durumunda)

4. Rastgele Draft Seçimi Orta Öncelik

Her seferinde farklı bir draft kullanılacak. Aynı konular tekrar etmeyecek.

Strateji:

  • Kullanılmamış draft'ları filtrele (is_generated = false)
  • Rastgele sıralama (inRandomOrder)
  • İlk draft'ı seç
  • Blog üretimi sonrası draft'ı "kullanıldı" olarak işaretle

5. Otomatik Draft Yenileme Sistemi Yüksek Öncelik

Son draft kullanıldığında otomatik olarak 100 yeni draft üretilecek.

Mantık:

  • Draft sayısı 1'e düştüğünde tetiklenecek
  • GenerateDraftsJob kuyruğa eklenecek (draftCount: 100)
  • Paralel çalışacak (blog üretimi devam ederken draft'lar oluşacak)
  • Queue bağımsız olduğu için birbirini engellemeyecek

Beklenen Sonuç: Sistem sürekli 50-100 arası draft havuzunda çalışacak.

6. Log & Monitoring Sistemi Orta Öncelik

Her işlem kayıt altına alınacak, sorun takibi kolaylaşacak.

Loglanacak Bilgiler:

  • Cron çalışma zamanı (timestamp)
  • Draft sayısı (öncesi/sonrası)
  • Seçilen draft ID'si ve başlığı
  • Queue job ID'leri
  • Başarı/hata durumu
  • İşlem süresi
Log dosyası: storage/logs/blog-cron.log

7. Test & Manuel Tetikleme Orta Öncelik

Sistemi test etmek için manuel komut ekleme.

Test Senaryoları:

  • Manuel tetikleme komutu çalıştır
  • Draft sayısını manuel değiştir ve senaryoları test et
  • Queue job'ların düzgün çalıştığını kontrol et
  • Log kayıtlarını incele
  • Cron'un çalışıp çalışmadığını doğrula
Test komutu: php artisan generate:hourly-blog

8. Cron Sunucu Ayarı Düşük Öncelik

Plesk/cPanel üzerinde Laravel scheduler'ı aktif etme.

Yapılacak:

  • Plesk Scheduled Tasks bölümüne git
  • Yeni task ekle: Her dakika çalışacak
  • Komut: cd /var/www/vhosts/tuufi.com/httpdocs && php artisan schedule:run >> /dev/null 2>&1
  • Laravel kendi içinde hourly kontrolü yapacak

⚠️ Dikkat Edilmesi Gerekenler

🔴 Önemli Uyarılar

  • Queue Worker Kontrolü: Horizon veya queue:work çalışıyor olmalı! Yoksa job'lar işlenmez.
  • Overlap Önleme: Bir blog üretimi bitmeden yeni cron tetiklenmemeli (withoutOverlapping kullan).
  • Timeout Koruması: Eğer OpenAI yanıt vermezse, sonsuz beklemeden timeout olsun.
  • Hata Yönetimi: Draft üretimi başarısızsa, blog üretimi durmalı (try-catch).
  • Database Lock: Aynı draft'ı iki kez seçmemek için database lock mekanizması kullan.

📊 Beklenen Sonuçlar

✅ Başarı Kriterleri

  • Her saat başı düzenli olarak 1 blog üretilecek
  • Sistem asla draft'sız kalmayacak (minimum 1, genelde 50-100 arası)
  • Son draft kullanıldığında otomatik 100 yeni draft oluşacak
  • Tüm işlemler loglanacak, sorun takibi kolay olacak
  • Günde 24, ayda 720 blog otomatik üretilecek
  • Manuel müdahale gerekmeyecek, sistem kendi kendini yönetecek

🔧 Teknik Gereksinimler

Gerekli Servisler

  • Laravel Scheduler: Task scheduling için (zaten var)
  • Queue Worker: Horizon veya queue:work (zaten çalışıyor)
  • OpenAI API: Blog içerik üretimi için (zaten entegre)
  • Cron Job: Sunucu cron ayarı (Plesk'te ayarlanacak)

Mevcut Modeller & Servisler

  • BlogAiDraft: Draft modeli (zaten var)
  • GenerateBlogFromDraftJob: Blog üretim job'u (zaten var)
  • GenerateDraftsJob: Draft üretim job'u (zaten var)
  • BlogAIContentWriter: OpenAI entegrasyonu (zaten var)

✅ Tüm altyapı hazır! Sadece cron command ve schedule ayarı yapılacak.