Halo teman-teman semuanya, pada kesempatan kali ini kita semua akan belajar Schedule di Laravel 9.
Laravel scheduler adalah fitur yang memungkinkan kita untuk membuat berbagai perintah dengan kode php dan menjadwalkannya sesuai kebutuhan. Dalam pengerjaannya, Laravel masih membutuhkan Cron agar bisa menjalankan *scheduler-*nya.
Apa itu Cron Job ? Crob Job merupakan penjadwalan pekerjaan berbasis waktu pada suatu sistem operasi. Cron Job dapat melakukan perintah secara otomatis dengan pengaturan oleh kita dalam bentuk script. Kita dapat mengatur perintah apa yang hendak dijalankan dan kapan perintah itu harus dijalankan. Pastinya sangat membantu bukan? Nah, salah satu penunjang Cron Job ini dapat digunakan dengan Task Scheduling pada LARAVEL.
Sebelum Mengikuti Tutorial ini, disarankan mengikuti Tutorial
atau bisa clone dari github
Oke tanpa lama-lama kita lanjut aja😁
Langkah 1 - Menjalankan Project Laravel
Silahkan jalankan perintah berikut ini di dalam terminal/CMD :
cd Laravel-logs
Perintah cd di atas digunakan untuk melakukan navigasi ke dalam sebuah folder, dalam contoh di atas kita akan masuk ke dalam folder Laravel-logs, Setelah berhasil masuk ke dalam folder project Laravel, sekarang silahkan jalankan perintah berikut ini di dalam terminal/CMD :
php artisan serve
Jika perintah di atas berhasil dijalankan, maka project Laravel akan dijalankan pada port 8000 di dalam localhost. Kita bisa membukanya di dalam browser dengan http://localhost:8000 dan jika berhasil, maka hasilnya seperti berikut ini.
Langkah 2 - Membuat Command baru
Silahkan jalankan perintah berikut ini di dalam terminal/CMD :
php artisan make:command DemoCron --command=demo:cron
Note : DemoCron di atas bebas ganti sesuai kebutuhan ya
Jika berhasil maka akan dibuatkan 1 file
Command baru di dalam app/Console/Commands/DemoCron.php
dan kemudian silahkan masukkan kode berikut ini :
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class DemoCron 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 description';
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
// Sample
\Log::info("Cron job Berhasil di jalankan " . date('Y-m-d H:i:s'));
// Kita bisa menyimpan logic disini
// Contoh: Update data di database yang statusnya belum diproses selama 24 jam menjadi FAILED
// $expired = Carbon::now()->subHour(24);
// $transaction = Transaction::where('transaction_status', '=', 'PENDING')->where('created_at', '<=', $expired)->first();
// $transaction->transaction_status = 'FAILED';
// $transaction->save();
}
}
di atas kita menambahkan Log::info
supaya mengetahui apakah Cron nya Jalan atau tidak
Selanjutnya Mendaftarkan Command tersebut ke app/Console/Kernel.php
Pada langkah ini, kita perlu mendefinisikan perintah kita pada file Kernel.php dengan waktu ketika ingin menjalankan perintah kita seperti fungsi di bawah ini:
fungsi |
artinya |
->everyMinute(); |
Jalankan tugas setiap menit |
->everyFiveMinutes(); |
Jalankan tugas setiap 5 menit |
->everyTenMinutes(); |
Jalankan tugas setiap 10 menit |
->everyFifteenMinutes(); |
Jalankan tugas setiap 15 menit |
->everyThirtyMinutes() |
Jalankan tugas setiap 30 menit |
->hourly(); |
Jalankan tugas setiap jam |
->hourlyAt(17); |
Jalankan tugas setiap jam pada 17 menit melewati jam |
->everyTwoHours(); |
Jalankan tugas setiap 2 jam |
->everyThreeHours(); |
Jalankan tugas setiap 3 jam |
->everyFourHours(); |
Jalankan tugas setiap 4 jam |
->everySixHours(); |
Jalankan tugas setiap 6 jam |
->daily(); |
Jalankan tugas setiap hari di tengah malam |
->dailyAt('13:00'); |
Jalankan tugas setiap hari pukul 13:00 |
->monthly(); |
Jalankan tugas pada hari pertama setiap bulan pada pukul 00:00 |
->yearly(); |
Jalankan tugas setiap tahun |
Link Documentasi https://laravel.com/docs/9.x/scheduling
Silahkan teman-teman buka file app/Console/Kernel.php
dan silahkan teman-teman tambahkan kode dibawah ini :
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected $commands = [
Commands\DemoCron::class,
];
protected function schedule(Schedule $schedule)
{
$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');
}
}
Di atas, kita protected $comment di dalammnya ada Command yang kita panggil,
setelah itu mendaftarkan ke function schedule
di jalankan setiap menit
Note : demo:cron adalah signature yg ada di file DemoCron.php
Langkah 3 - Menjalankan Schedule
Silahkan jalankan perintah berikut ini di dalam terminal/CMD :
php artisan schedule:run
Jika perintah di atas berhasil dijalankan, Kita bisa membukanya di dalam browser dengan http://localhost:8000/log-viewers dan jika berhasil, maka hasilnya seperti berikut ini.
Sampai disini pembahasan Laravel scheduler / Task Scheduling, semoga bermanfaat,
Jika teman-teman ada pertanyaan, silahkan teman-teman bisa bertanya melalui kolom kementar dibawah, dengan menyertakan error
, secreenshot
, source code
, dll.
Jika ada saran, atau ingin menawarkan kerjasama, silahkan teman-teman bisa mengirimkannya ke
email : alisadikinsyahrizal@gmail.com
wa : 089649532860
telegram : syahrizal_as
Ig : syahrizal_alisadikin