Laravel 8 Cron Job Task Scheduler

Di kesempatan kali ini akan berbagi tutorial tentang bagaimana caranya memanfaatkan fitur laravel task scheduler yang dimana di dokumentasi bisa kalian lihat di SINI itu sebetulnya banyak sekali manfaatnya untuk aplikasi yang lumayan komplek biasanya di butuhkan yang otomatis. 

Jika kalian masih bingung kapan saat yang tepat menggunakan fitur laravel scheduler, saat di aplikasi kalian membutuhkan yang otomatis triger biasanya ketika kalian butuh kirim Notifikasi ke User maka di sinilah scheduler di butuhkan, atau juga saat aplikasi kalian butuh trigger kirim email otomatis maka scheduler di butuhkan. 

Jika OS kalian Windows, kalian bisa mengikuti tutorial INI namun jika kalian OS Mac maka fitur cron secara otomatis sudah ada.

LANGKAH 1 : Install Laravel 8

composer create-project laravel/laravel="8.0.*" laravel-scheduler

Untuk memulai pastikan kalian sudah membuat project laravel 8 dengan menjalankan syntak berikut ini :

LANGKAH 2 : Buat Command Baru

Di laravel ada namanya make:command yang dimana kita bisa menambahkan syntak baru yang berfungsi untuk menjalankan event yang kita inginkan, command inilah yang akan di panggil oleh cronjob.

php artisan make:command DemoCronCommand --command=demo:cron

Maka secara otomatis akan terbuat file DemoCronCommand yang ada di directory "app/Console/Commands/DemoCronCommand.php" silahkan buka file tersebut kemudian lakukan perubahan seperti ini :

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

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

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

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

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        \Log::info("Crond bekerja dengan baik!");
    }
}

LANGKAH 3 : Daftarkan ke Kernel Laravel Console

Command yang telah kita buat ini tentunya harus kita daftarkan ke kernel console laravel karena cronjob akan memanggil berapa menit sekali atau berapa jam sekali syntak tersebut harus dijalankan contohnya kita akan menjalanlan syntaknya tiap menit berarti pakai method "->everyMinute()" ada beberapa method di scheduler laravel.

 

 ->everyMinute();  Console kita akan di jalankan setiap menit
 ->everyFiveMinutes();  Console di jalankan setiap 5 Menit sekali
 ->everyTenMinutes();  Console di jalankan setiap 10 Menit sekali
 ->everyFifteenMinutes();  Console di jalankan setiap 15 Menit sekali
 ->everyThirtyMinutes();  Console di jalankan setiap 30 Menit sekali
 ->hourly();  Console di jalankan setiap 1 jam sekali
 ->hourlyAt(17);  Console di jalankan setian jam 17
 ->daily();  Console di jalankan setiap tengah malam
 ->dailyAt(’13:00′);  Console di jalankan tiap hari jam 13
 ->twiceDaily(1, 13);  Console di jalankan setiap jam 1 & jam 13
 ->weekly();  Console di jalankan setiap Minggu
 ->weeklyOn(1, ‘8:00’);  Console di jalankan setiap minggu tiap hari selasa setiap jam 8
 ->monthly();  Console di jalankan setiap bulan
 ->monthlyOn(4, ’15:00′);  Console di jalankan setiap bulan, setiap tanggal 4 dan jam 15:00
 ->quarterly();  Console di jalankan kuarter
 ->yearly();  Console di jalankan setiap 1 tahun sekali
 ->timezone(‘America/New_York’);  Set Time Zone

Buka file app/Console/Kernel.php

 

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        //
        Commands\DemoCronCommand::class
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        // $schedule->command('inspire')->hourly();
        $schedule->command('demo:cron')
                 ->everyMinute();
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');

        require base_path('routes/console.php');
    }
}

LANGKAH 4 : Run Scheduler untuk memastikan.

Sebelum kita konfigurasi cronjob nya maka kita bisa melakukan test jalankan schedulernya dengan menjalankan syntak.

php artisan schedule:run

Setelah menjalankan syntak test di atas untuk output hasilnya bisa di cek file laravel.log

storage/logs/laravel.log

Silahkan open file laravel.log nya maka akan terbuka file seperti ini :

[2022-02-13 09:05:11] local.INFO: Crond bekerja dengan baik!  

Yang terakhir kita perlu manage crontab nya di sini saya menggunakan OS Linux Centos. Kalian tinggal menjalankan syntak crontab -e maka akan otomatis ke general config crontab

crontab -e

Setelah menjalankan syntak diatas untuk sample config crontab nya.

* * * * * php /path/to/artisan schedule:run 1>> /dev/null 2>&1

   

OR

  

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

Semoga kalian terbantu dengan tutorialnya

Related Articles

Comments