Laravel’de Cron Job Nasıl Kullanılır
#Laravel - 30 Jun 2023

Merhaba, bu yazımda Laravel’de Cron Job nasıl kullanılır, Laravel kullanarak zamanlanmış görevler nasıl oluşturulur onu göstereceğim.

Öncelikle Cron nedir sorusuyla anlatıma başlayalım. Cron, Unix sistemlerde iş planlama aracı olarak isimlendirilebilir. Cron, Crontab üzerinden tanımlanmış çalışması gereken işleri çalıştırır. Crond sayesinde de planlanmış işler arkaplanda çalışır. Cron job ise Cron aracılığıyla plandığımız herhangi bir işe denir. Cron işleri dakikalık, saatlik, günlük, aylık ve yıllık gibi periyodik zamanlarla planlanabilmektedir.

Yukarıda yaptığım kısa tanıma göre Laravel kullanarak bir Cron Job örneği oluşturup konuya netlik getirelim. E-ticaret sitesine sahip bir şirket yöneticisi olduğumuzu varsayalım. Günlük satış raporlarını her akşam 22:00’ da satış paneline girerek Excel formatında rapor haline getirmek yerine, oluşturacağımız Cron job sayesinde her akşam 22:00 ‘da otomatik olarak oluşmasını sağlayan bir kod yazabilir ve oluşan raporun belirteceğimiz maile gönderilmesini sağlayabiliriz. Bu sayede her akşam 22:00’da yapmamız gereken bir işi planlayarak iş yükünü azaltabiliriz.

Laravel’de Cron Job Kullanımı

Laravel’de planlanmış işler “app\Console\Kernel.php” içerisinde yer almaktadır. Yeni bir planlanmış iş eklemek için bu dosyayı açın ve aşağıdaki gibi eklemek istediğiniz planlamış yeni işi ekleyin.

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

Yukarıdaki örnekte “recens_users” tablosundaki tüm veriler her gece 00:00 da silinecek şekile tanımlanmıştır. Bu örnekten yola çıkarak bizde planlanmış işler oluşturabiliriz.

Eğer bir artisan komutu çalıştırmak isterseniz

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

Eğer kuyrukta bir job çalıştırmak isterseniz

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

Eğer bir shell komutu çalıştırmak isterseniz

$schedule->exec('node /tayfun/send.js')->daily();

Şeklinde çalıştırabilirsiniz.

Hangi zamanlarda nasıl çalışacağını aşağıdaki tabloda bulunan örneklerden inceleyebilirsiniz.

Her dakika

->everyMinute()

Her iki dakika da bir

->everyTwoMinutes()

Her saat

->hourly()

Saatin 17.dakikası

->hourlyAt(17)

Her 4 saat de bir

->everyFourHours()

Günlük

->daily()

Haftalık

->weekly()

Aylık

->monthly()

Yıllık

->yearly()


Burada bulunan doküman üzerinden yukarıdaki tabloyu daha detaylı görüntüleyebilirsiniz.
 

Yukarıda tanımladığımız örnekleri çalıştırma aşamasına geldik. Aşağıdaki komutu sunucuya Cron olarak eklemeniz yeterli olacaktır. Sunucuda Crond kurulu olduğunu varsayarak sırasıyla aşağıdaki işlemleri yapmanız yeterli.

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

İlk olarak crontab -e komutunu çalıştırın ve yukarıda paylaştığım komutu en alta ekleyin ve kaydedin. Bu komut her dakika çalışmasını sağlayacaktır. Burada bir örnek komut olacaktır yorum satırı şeklinde. Eklerken bu örneği referans alabilirsiniz.

Tüm işlemler bu kadar. Daha detaylı içeriğe Laravel dökümanı üzerinden ulaşabilirsiniz.