Laravel Cron

Bu yazıda Laravel’le yaptığınız bir uygulama da zamanlanmış görevlere ihtiyacınız olduğunda kullanılan bir teknikten bahsedeceğim. Diyelim ki saatte bir çalıştırmanız gereken bir kod blogunuz var. Linux sistemlerde Shell Script yazıp crontab’a ekleye bileceğiniz gibi bu işlemi Laravel’le de yapabilirsiniz. Lafı fazla uzatmadan başlayalım. İlk olarak işi yapacak command‘i oluşturalım. bunun için terminale aşağıdaki artisan komutunu yazın.

php artisan make:command TestCron

yukarıdaki komut app/Console/Commands/ klasörü içerisinde TestCron.php adında bir dosya oluşturacak.

namespace App\Console\Commands;

use Illuminate\Console\Command;

class TestCron extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'command:name';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //
    }
}

$signature değişkeni command adını taşınır.

protected $signature = 'yazici';

Şeklinde değiştirin. handle() fonksiyonu ise asıl işi yapan kodun olduğu alandır.

public function handle()
{
    Storage::put('deneme.txt', 'command test');
}

Şuana kadar çalıştırıldığında storage/app/deneme.txt dosyasını oluşturup içerisine command test yazan command classını oluşturduk. Test etmek için terminale aşağıdaki artisan komutu yazabilirsiniz.

php artisan yazici

Her şey yolunda ise ikinci adıma yani, command’i ConsoleKernel tanıtmaya geçelim. Bu işlemi app/Console/Kernel.php dosyasını aşağıdaki gibi düzenleyerek yapabilirsiniz.

protected $commands = [
    TestCron::class
];
protected function schedule(Schedule $schedule)
{
     $schedule->command('yazici')->everyMinute();
}

Bura da everyMinute() fonksiyonu önemli. Görevin ne sıklıkla çalışacağını bu fonksiyonla belirtebiliyorsunuz. Yazını sonunda kullanabileceğiniz tüm fonksiyonların tablosu olacak. Şimdi yazdığımız programı test edelim.

php artisan schedule:run 

Sıra geldi yazdığımız programı crontab’a eklemeye. İlk olarak sunucunuzda php’nin nerede kuru olduğunu bilmeniz gerekiyor. Terminale which php yazarak php komutunun path’ini öğrenebilirsiniz. Kuvvetle muhtemel /usr/bin/php sonucunu alacaksınız. İkinci adım sa artisan dosyasının path’ini almak olacak. artisan dosyası laravel projenizin ana dizinindedir. artisan komutlarınızı çalıştırdığınız dizinde pwd komutunu yazarsanız size /var/www/html gibi tam path’i verecektir. Crontab’a ekleyeceğiniz komut aşağıdaki gibi olacak.

* * * * * /usr/bin/php /var/www/html/artisan schedule:run >> /dev/null 2>&1

Yukarıdaki komutu crontab’a eklemek için terminalde crontab -e komutunu çalıştırın. Bu komut crond dosyasını nano ile açacaktır. Eğer açılmazsa sunucunuza apt install nano komutu ile nano‘yu kurun. crond dosyasının en altına yukarıda hazırladığınız komut satırını ekleyerek kaydedin. Artık dakikada bir programınız çalışacaktır. Eğer işlem başarılı olmazsa sunucunuzda cron’un kurulu ve çalış durumda olduğundan emin olun.

Cron’u kurmak için

apt install crond

Cron’u çalıştırmak için

/etc/init.d/cron start

Cron’u yeniden başlatmak için

/etc/init.d/cron restart

Crontab da yaptığınız değişikliklerin algılanması içinse

/etc/init.d/cron reload

Komutlarını kullana bilirsiniz.

ConsoleKernel içinde kullanabileceğiniz tüm zamanlayıcı fonksiyolar.

Yöntem Açıklama
->weekdays(); Görevi hafta içi günlerle sınırlayın
->weekends(); Görevi hafta sonlarıyla sınırlayın
->sundays(); Görevi Pazar ile sınırlayın
->mondays(); Görevi Pazartesi ile sınırla
->tuesdays(); Görevi Salı ile sınırla
->wednesdays(); Görevi Çarşamba ile sınırlayın
->thursdays(); Görevi Perşembe ile sınırla
->fridays(); Görevi Cuma ile sınırlayın
->saturdays(); Görevi Cumartesi ile sınırla
->between($start, $end); Görevi başlangıç ​​ve bitiş saatleri arasında çalışacak şekilde sınırlayın
->when(Closure); Bir doğruluk testine göre görevi sınırlayın
->environments($env); Görevi belirli ortamlarla sınırlayın
ilk Yorum

Yorum Ekle

E-posta hesabınız yayımlanmayacak.

Gerçek kişi doğrulaması
49 − 48 =