Laravel’de Scheduled Task (Zamanlanmış Görevler) Kullanımı

Laravel, güçlü ve esnek bir PHP framework’üdür ve birçok geliştirici tarafından tercih edilir. Laravel’in sunduğu birçok özellikten biri de zamanlanmış görevleri (scheduled tasks) yönetebilme yeteneğidir. Zamanlanmış görevler, belirli bir zaman diliminde otomatik olarak çalışacak olan görevlerdir. Bu görevler, belirli aralıklarla tekrarlanabilir veya belirli bir zamanda yalnızca bir kez çalıştırılabilir.
Laravel’de zamanlanmış görevleri yönetmek için öncelikle Task Scheduler (Görev Zamanlayıcı) adlı bir bileşeni kullanırız. Task Scheduler, Laravel’in bünyesinde yer alan bir bileşendir ve zamanlanmış görevleri tanımlamamıza ve yönetmemize olanak sağlar. Şimdi, zamanlanmış görevlerin nasıl kullanılacağına daha yakından bakalım.
1. Task Scheduler’ı Yapılandırma
Laravel’de zamanlanmış görevlerin kullanımına başlamadan önce, Task Scheduler’ı yapılandırmanız gerekmektedir. Task Scheduler’ın yapılandırma dosyası app/Console/Kernel.php
adlı dosyadadır. Bu dosyayı açarak, $commands
ve $schedule
özelliklerini göreceksiniz.
protected $commands = [
// Burada kullanacağınız özel komutları tanımlayabilirsiniz.
];
protected function schedule(Schedule $schedule)
{
// Burada zamanlanmış görevleri tanımlayabilirsiniz.
}
$commands
özelliği, zamanlanmış görevlerinizde kullanmak istediğiniz özel komutları tanımlamanızı sağlar. Bu özellik sayesinde, görevlerinizi daha modüler hale getirebilir ve yönetebilirsiniz.$schedule
özelliği ise, zamanlanmış görevleri tanımlamak için kullanılan Fluent (Akıcı) API’yi içerir. Bu API, görevleri kolayca tanımlamamızı sağlar.
2. Zamanlanmış Görevleri Tanımlama
Zamanlanmış görevleri tanımlamak için $schedule
özelliğini kullanırız. Bu özellik üzerinden Fluent API’yi kullanarak görevleri belirleyebiliriz. İşte en yaygın kullanılan zamanlanmış görev tanımları:
a. Belirli Bir Zaman Diliminde Çalışan Görevler
Eğer bir görevi belirli bir zaman diliminde çalıştırmak istiyorsanız, ->daily()
, ->weekly()
, ->monthly()
veya ->yearly()
yöntemlerini kullanabilirsiniz. Bu yöntemler, görevin günlük, haftalık, aylık veya yıllık olarak çalıştırılmasını sağlar.
$schedule->command('my:task')->daily();
Yukarıdaki örnekte, my:task
adlı komutun her gün çalıştırılması sağlanmıştır.
b. Belirli Bir Aralıkta Çalışan Görevler
Görevleri belirli bir aralıkta çalıştırmak istiyorsanız, ->everyMinute()
, ->everyFiveMinutes()
, ->everyTenMinutes()
vb. gibi yöntemleri kullanabilirsiniz. Bu yöntemler, belirli bir süre aralığında görevin tekrarlanmasını sağlar.
$schedule->command('my:task')->everyFiveMinutes();
Yukarıdaki örnekte, my:task
adlı komut her beş dakikada bir çalıştırılır.
c. Özel Bir Zaman Diliminde Çalışan Görevler
Özel bir zaman diliminde çalışacak bir görev tanımlamak isterseniz, ->cron()
yöntemini kullanabilirsiniz. Bu yöntem, Cron tablosu formatında bir ifade alır ve görevi belirtilen zaman diliminde çalıştırır.
$schedule->command('my:task')->cron('0 0 * * *');
Yukarıdaki örnekte, my:task
adlı komut her gece saat 00:00’da çalıştırılır.
3. Komutları Tanımlama
Laravel’de zamanlanmış görevlerle birlikte çalıştırılmak üzere komutlar tanımlayabilirsiniz. Komutlar, projenize özgü iş mantığını içeren PHP sınıflarıdır. Bu sınıflar, app/Console/Commands
klasörü altında yer alır. Eğer özel bir komut oluşturmak isterseniz, make:command
Artisan komutunu kullanabilirsiniz.
php artisan make:command MyTaskCommand
Yukarıdaki komut, MyTaskCommand
adlı bir komut sınıfı oluşturur. Bu sınıf, app/Console/Commands
klasöründe bulunur ve zamanlanmış görevlerle çalıştırılmak üzere kodlarınızı içerir.
4. Zamanlanmış Görevleri Çalıştırma
Zamanlanmış görevleri çalıştırmak için Laravel, Artisan komutunu kullanırız. Artisan, Laravel’in komut satırı arayüzüdür ve zamanlanmış görevleri çalıştırmak için schedule:run
komutunu kullanırız.
php artisan schedule:run
Yukarıdaki komutu, zamanlanmış görevleri çalıştırmak için cron tablosunda belirtilen zamanlarda çalıştırmanız gerekmektedir. Bu komut, Kernel
sınıfında tanımlanan zamanlanmış görevleri alır ve belirtilen zaman dilimlerine göre komutları çalıştırır. Bunu, schedule:run
komutunu bir Cron görevi olarak ayarlayarak otomatik olarak gerçekleştirebilirsiniz.
5. Zamanlanmış Görevleri Kaydetme
Zamanlanmış görevlerinizi kaydetmek için Kernel
sınıfındaki schedule()
yöntemini kullanmanız gerekmektedir. Bu yöntem içerisinde zamanlanmış görevleri tanımlayabilir ve çeşitli işlemler yapabilirsiniz. Örneğin:
protected function schedule(Schedule $schedule)
{
$schedule->command('my:task')->daily();
$schedule->call(function () {
// İşlemleriniz burada yer alır
})->weekly();
}
Yukarıdaki örnekte, my:task
adlı komut her gün, anonim bir fonksiyon ise her hafta çalıştırılır. İşlemlerinizi bu fonksiyon içerisinde tanımlayabilirsiniz.
6. Çıktıları ve Hataları İzleme
Laravel, zamanlanmış görevlerin çıktılarını ve hatalarını kaydetmek için çeşitli seçenekler sunar. Öncelikle, ->sendOutputTo()
yöntemini kullanarak çıktıları belirli bir dosyaya yönlendirebilirsiniz.
$schedule->command('my:task')->daily()->sendOutputTo('storage/logs/mytask.log');
Yukarıdaki örnekte, my:task
adlı komutun çıktıları storage/logs/mytask.log
dosyasına kaydedilir.
Ayrıca, hata mesajlarını yakalamak için ->onFailure()
yöntemini kullanabilirsiniz.
$schedule->command('my:task')->daily()->onFailure(function () {
// Hata işlemleri burada yer alır
});
Yukarıdaki örnekte, my:task
adlı komut hatalı çalıştığında belirtilen işlemler gerçekleştirilir.
Sonuç
Laravel’de zamanlanmış görevler (Scheduled Tasks) kullanarak belirli bir zaman diliminde otomatik olarak çalışan görevleri kolayca yönetebilirsiniz. Task Scheduler’ı yapılandırarak zamanlanmış görevleri tanımlayabilir, özel komutlar oluşturabilir ve görevleri istediğiniz zaman dilimlerinde çalıştırabilirsiniz. Ayrıca, çıktıları ve hataları izleyerek işlemlerinizi daha iyi kontrol edebilirsiniz.
Emoji kullanımına gelince, Laravel’de zamanlanmış görevleri anlatırken emoji kullanımı opsiyoneldir, ancak metninizi daha canlı hale getirebilir. Umarım bu blog yazısı Laravel’de Zamanlanmış Görevlerin kullanımı hakkında size yardımcı olur! 😊🚀