ahmadajah03 Sun Jan 2021 1 year ago

Bagaimana cara mengatur Dynamic Cron Job (Task Scheduling) di Laravel?

Artikel ini akan memberikan contoh task scheduling dinamis laravel. Artikel ini akan memberi Anda contoh sederhana dari pengaturan cron job dinamis laravel. Tutorial ini akan memberi Anda contoh sederhana dari contoh taks dinamis laravel. Saya akan menunjukkan kepada Anda tentang laravel menambahkan task scheduling dinamis.

Di sini Anda cukup mengatur task scheduling dinamis cron di laravel 6, laravel 7 dan laravel 8.

Terkadang kita perlu menyiapkan tugas cron secara dinamis untuk proyek laravel kita. Anda mungkin harus membuat master untuk admin dapat mengatur waktu harian, mingguan, bulanan atau tertentu untuk penjadwal tugas. sehingga Anda dapat melakukannya menggunakan penjadwal tugas laravel.

Saya akan menunjukkan kepada Anda langkah demi langkah cara mengatur secara dinamis cron jon menggunakan task scheduling laravel. tapi jika anda ingin menambahkan cron job dengan daily, mingguan dll tanpa dinamik maka anda juga bisa membaca artikel saya ini, Setup Cron Job di Laravel .

Mari kita lihat langkah di bawah ini untuk mengatur cron job dinamis di laravel.

Langkah 1: Instal Laravel

Pada langkah ini, jika Anda belum menyiapkan aplikasi laravel maka kita harus mendapatkan aplikasi laravel yang baru. Jadi jalankan perintah di bawah dan dapatkan aplikasi laravel baru yang bersih.

composer create-project --prefer-dist laravel/laravel blog

Langkah 2: Buat Migrasi

Di sini, kita perlu membuat migrasi database untuk tabel taks dan juga kita akan membuat model untuk tabel Task.

php artisan make:migration create_tasks_table

Migration:

<?php
  
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
  
class CreateTasksTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('tasks', function (Blueprint $table) {
            $table->id();
            $table->string('title')->nullable();
            $table->string('type')->nullable();
            $table->string('frequency')->nullable();
            $table->timestamps();
        });
    }
  
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('tasks');
    }
}
php artisan migrate

Langkah 3: Buat Model

Sekarang kita akan membuat model Task dengan menggunakan perintah berikut:

php artisan make:model Task

App/Task.php

<?php
  
namespace App;
  
use Illuminate\Database\Eloquent\Model;
  
class Task extends Model
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'title', 'type', 'frequency',
    ];
}

Langkah 4: Buat Seeder

Sekarang, kita akan membuat seeder untuk menambahkan beberapa data dummy ke modul task. jadi mari kita buat seeder dan jalankan.

php artisan make:seeder CreateTask

database/seeds/CreateTask.php

<?php
  
use Illuminate\Database\Seeder;
use App\Task;
  
class CreateTask extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $tasks = [
            [
                'title' => 'It will run every minute',
                'type' => 'everyMinute',
                'frequency' => 'everyMinute'
            ],
            [
                'title' => 'It will run every five minute',
                'type' => 'everyFiveMinutes',
                'frequency' => 'everyFiveMinutes'
            ],
            [
                'title' => 'It will run daily',
                'type' => 'daily',
                'frequency' => 'daily'
            ],
            [
                'title' => 'It will run every month',
                'type' => 'monthly',
                'frequency' => 'monthly'
            ]
        ];
  
        foreach ($tasks as $key => $task) {
            Task::create($task);
        }
    }
}

Sekarang, mari jalankan seeder yang dibuat dengan perintah berikut:

php artisan db:seed --class=CreateTask

Langkah 5: Set Dynamic Task Scheduling

Sekarang, pada langkah ini, kita akan mengatur logika pekerjaan cron dinamis di file Kernel.php. jadi mari tambahkan seperti file di bawah.

app/Console/Kernel.php

<?php
  
namespace App\Console;
  
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use App\Task;
use Log;
  
class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        'App\Console\Commands\DatabaseBackUp'
    ];
  
    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->command('database:backup')->daily();
  
        /* Get all tasks from the database */
        $tasks = Task::all();
  
        foreach ($tasks as $task) {
  
            $frequency = $task->frequency;
  
            $schedule->call(function() use($task) {
                /*  Run your task here */
                Log::info($task->title.' '.\Carbon\Carbon::now());
            })->$frequency();
        }
    }
  
    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');
  
        require base_path('routes/console.php');
    }
}

Sekarang kita siap untuk mengatur perintah penjadwal kita di crontab. mari tambahkan perintah pada file crontab di server.

crontab -e

tambahkan perintah berikut ke file itu dengan jalur root proyek Anda:

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

Sekarang, ini berjalan secara otomatis,

Anda dapat memeriksa output di file log Anda seperti di bawah ini:

Saya harap ini dapat membantu Anda ...

create cron job in laravel laravel