Laravel

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! 😊🚀

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu
Bu internet sitesinde size en iyi deneyimi sunmak için çerezleri kullanıyoruz. Bu siteyi kullanmaya devam ederek çerez kullanımımızı kabul etmiş olursunuz.
Kabul Et
Reddet
Privacy Policy