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.
Zamanlanmış görevler, uygulamanızda düzenli aralıklarla otomatik olarak çalışmasını istediğiniz işlemleri ifade eder. Örneğin:
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(); }
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();
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');
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ı 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');
Aynı görevin aynı anda birden fazla çalışmasını engellemek için:
$schedule->command('emails:send')->withoutOverlapping();
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.
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.