design

Laravel'de Task Scheduling: Zamanlanmış Görevler

March 24, 2025

Merhaba arkadaşlar, bugün sizlere Laravel'de zamanlanmış görevler (task scheduling) konusunu detaylı şekilde anlatacağım. Laravel'in sunduğu bu güçlü özellik sayesinde, uygulamanızda belirli aralıklarla otomatik olarak çalışacak görevler tanımlayabilirsiniz. Gelin bu özelliği birlikte keşfedelim.


Task Scheduling Nedir?

Zamanlanmış görevler, uygulamanızda düzenli aralıklarla otomatik olarak çalışmasını istediğiniz işlemleri ifade eder. Örneğin:

  • Her gün veritabanı yedekleme
  • Haftalık e-posta raporları gönderme
  • Dakikada bir cache temizleme
  • Aylık abonelik faturalandırma


Laravel'de Task Scheduling Temelleri

Laravel'de zamanlanmış görevler app/Console/Kernel.php dosyasında tanımlanır. Bu dosyada schedule metodunu kullanarak görevlerinizi planlayabilirsiniz.


Örnek Temel Yapı:

protected function schedule(Schedule $schedule)
{
    $schedule->command('inspire')->hourly();
    $schedule->job(new SendEmails)->daily();
    $schedule->exec('node /home/forge/script.js')->daily();
}


Görev Zamanlama Yöntemleri

1. Komut Çalıştırma:

Artisan komutlarını belirli aralıklarla çalıştırabilirsiniz:


$schedule->command('emails:send --force')->daily();


2. İş Kuyruğuna Ekleme:

Job'ları doğrudan kuyruğa ekleyebilirsiniz:


$schedule->job(new CheckServerStatus)->everyFiveMinutes();


3. Shell Komutları Çalıştırma:

Sistem komutlarını çalıştırabilirsiniz:


$schedule->exec('node /path/to/script.js')->weekly();


4. Closure Kullanma:

Doğrudan fonksiyon çalıştırabilirsiniz:


$schedule->call(function () {
    DB::table('recent_users')->delete();
})->daily();


Zamanlama Seçenekleri

Laravel size çok esnek zamanlama seçenekleri sunar:


// Belirli aralıklarla
$schedule->command('emails:send')->everyMinute();
$schedule->command('emails:send')->everyFiveMinutes();
$schedule->command('emails:send')->everyTenMinutes();
$schedule->command('emails:send')->everyThirtyMinutes();
$schedule->command('emails:send')->hourly();
$schedule->command('emails:send')->daily();
$schedule->command('emails:send')->weekly();
$schedule->command('emails:send')->monthly();
$schedule->command('emails:send')->quarterly();
$schedule->command('emails:send')->yearly();

// Özel zamanlama
$schedule->command('emails:send')->weekdays()->hourly()->at('08:00');
$schedule->command('emails:send')->between('8:00', '17:00');
$schedule->command('emails:send')->unlessBetween('23:00', '4:00');


Gerçek Dünya Örnekleri

1. Günlük Veritabanı Yedekleme:


$schedule->command('backup:run')->daily()->at('01:00');


2. Haftalık Kullanıcı Raporu:


$schedule->job(new SendWeeklyReports)->weekly()->mondays()->at('09:00');


3. Dakikada Bir Cache Temizleme:


$schedule->command('cache:clear')->everyMinute();


4. Aylık Abonelik Faturalandırma:


$schedule->command('billing:process')->monthlyOn(1, '8:00');


Görev Çıktılarını Yönetme

Görev çıktılarını dosyaya yazabilir veya e-posta ile alabilirsiniz:


// Dosyaya yazma
$schedule->command('emails:send')
         ->daily()
         ->sendOutputTo('/path/to/log');

// E-posta gönderme
$schedule->command('emails:send')
         ->daily()
         ->sendOutputTo('/path/to/log')
         ->emailOutputTo('admin@example.com');


Görev Çakışmalarını Önleme

Aynı görevin aynı anda birden fazla çalışmasını engellemek için:


$schedule->command('emails:send')->withoutOverlapping();


Sunucuda Cron Job Ayarlama

Zamanlanmış görevlerin çalışması için sunucunuzda cron job tanımlamanız gerekir:


* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

Bu ayar, her dakika Laravel'in zamanlanmış görevleri kontrol etmesini sağlar.

Task Scheduling Avantajları

  • Otomasyon: Rutin işlemleri otomatikleştirir
  • Esneklik: Çok detaylı zamanlama seçenekleri
  • Güvenilirlik: Laravel altyapısıyla sorunsuz çalışır
  • Entegrasyon: Diğer Laravel özellikleriyle uyumlu


Laravel'in task scheduling özelliği, uygulamanızın bakımını kolaylaştıran ve rutin işlemleri otomatikleştiren güçlü bir araçtır. Bu rehberde öğrendiklerinizle artık kendi zamanlanmış görevlerinizi oluşturabilirsiniz.

9 + 4 =