Press "Enter" to skip to content

Membuat Cron Job Task Schedule Pada Laravel

fadli 2

Membuat Cron Job Task Schedule Pada Laravel – Saat kita sedang mendevelop sebuah aplikasi, terkadang kita perlu membuat sebuah task tertentu yang wajib dijalankan dalam kurun waktu tertentu..

Untung nya pada Laravel sudah terdapat fitur Schedule, jadi kita bisa dengan mudah membuat task2 schedule apa saja yang perlu dijalankan pada sistem tersebut dalam interval waktu yang sudah kita tentukan..

Cara Membuat Schedule

Untuk cara pembuat schedule sebetulnya sangat mudah sekali, kita hanya perlu membuat nya didalam file ../app/Console/Kernel.php..

Baca Juga : Cara Import Database MySql Berukuran Besar dengan BigDump..

Sebagai catatan, tutorial ini dibuat menggunakan Laravel versi 8.. Jika temen-temen menggunakan laravel versi berbeda, kemungkinan besar cara nya tetap sama..

Contoh pembuatan schedule sederhana

Sebagai contoh, saya ingin membuat schedule untuk menghapus table trash setiap hari nya, maka kita bisa membuat nya seperti berikut:

<?php
 
namespace App\Console;
 
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Illuminate\Support\Facades\DB;
 
class Kernel extends ConsoleKernel
{
    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->call(function () {
            DB::table('trash')->delete();
        })->daily();
    }
}

Perlu kalian perhatikan pada script diatas di baris ke-19, kita menggunakan perintah “$schedule->call” untuk membuat sebuah schedule baru..

Dan pada baris ke-21 terdapat perintah “->daily()” yang artinya kita akan menjalankan schedule tersebut pada setiap hari nya..

Interval waktunya bisa kita tentukan sendiri, laravel sendiri sudah menyediakan beberapa opsi interval waktu yang bisa kalian pilih sendiri sesuai dengan kebutuhan, selengkapnya ada dibagian bawah tutorial ini..

Menjalankan perintah artisan didalam Schedule

Kita juga bisa menjalankan perintah2 artisan kedalam schedule, sebagai contoh saya ingin ingin menjalankan perintah “php artisan optimize:clear” setiap 5 menit sekali, maka cara nya adalah seperti berikut:

....
protected function schedule(Schedule $schedule)
{
    $schedule->command('optimize:clear')->everyFiveMinutes();
}
....

Mencegah Tumpang Tindih Tugas Schedule

Secara default, Task Schedule pada laravel akan terus dijalankan meskipun pada task yang sebelumnya masih berjalan..

Sebagai contoh, pada setiap menit kita membuat sebuah proses task scheduling tertentu, dan ternyata proses untuk menjalankan task tersebut lebih dari 1 menit, untuk mencegah tumpang tindih task, kita bisa menambahkan syntax withoutOverlapping()..

$schedule->command('emails:send')->withoutOverlapping();

Jadi dengan perintah ->withoutOverlapping(), sistem akan mengunci task tersebut agar tidak terjadi tumpang tindih..

Perintah ini wajib kamu pake kalo kamu ga tau seberapa lama proses task tersebut berjalan..

Memaksa Task Terus Berjalan Meskipun Dalam Mode Maintenance

Secara default, jika aplikasi laravel kita sedang berada dalama Maintenance Mode, maka seluruh Task Schedule yang sudah kita buat akan ikut terhenti..

Kalau kamu ingin task tersebut tetap berjalan, maka kamu perlu menambahkan perintah evenInMaintenanceMode() seperti pada contoh berikut:

$schedule->command('emails:send')->evenInMaintenanceMode();

Frekuensi / Interval Waktu Schedule nya

Laravel sendiri sudah menyiapkan Frekuensi / Interval waktu schedule yang sudah siap untuk kita gunakan..

Dengan beberapa opsi yang sudah disiapkan, ini semakin mempermudah kita dalam membuat task schedule..

->everyMinute(); Run the task every minute
->everyTwoMinutes(); Run the task every two minutes
->everyThreeMinutes(); Run the task every three minutes
->everyFourMinutes(); Run the task every four minutes
->everyFiveMinutes(); Run the task every five minutes
->everyTenMinutes(); Run the task every ten minutes
->everyFifteenMinutes(); Run the task every fifteen minutes
->everyThirtyMinutes(); Run the task every thirty minutes
->hourly(); Run the task every hour
->hourlyAt(17); Run the task every hour at 17 minutes past the hour
->everyTwoHours(); Run the task every two hours
->everyThreeHours(); Run the task every three hours
->everyFourHours(); Run the task every four hours
->everySixHours(); Run the task every six hours
->daily(); Run the task every day at midnight
->dailyAt('13:00'); Run the task every day at 13:00
->twiceDaily(1, 13); Run the task daily at 1:00 & 13:00
->weekly(); Run the task every Sunday at 00:00
->weeklyOn(1, '8:00'); Run the task every week on Monday at 8:00
->monthly(); Run the task on the first day of every month at 00:00
->monthlyOn(4, '15:00'); Run the task every month on the 4th at 15:00
->twiceMonthly(1, 16, '13:00'); Run the task monthly on the 1st and 16th at 13:00
->lastDayOfMonth('15:00'); Run the task on the last day of the month at 15:00
->quarterly(); Run the task on the first day of every quarter at 00:00
->yearly(); Run the task on the first day of every year at 00:00
->yearlyOn(6, 1, '17:00'); Run the task every year on June 1st at 17:00
->timezone('America/New_York'); Set the timezone for the task

Dengan banyaknya opsi yang sudah disiapkan, kamu tinggal pilih saja frekuensi waktu untuk menjalankan task tersebut..

Untuk informasi lebih lengkap nya bisa kalian kunjungi halaman resmi nya disini..

Cara menjalankan Task Schedule

Sekarang kita akan coba menjalankan testing task schedule nya apakah berhasil running atau tidak..

Disini saya akan menjalankan testing nya pada 2 server, yaitu di server lokal saya, dan juga di server hosting saya..

Pertama kita buat task schedule sederhana nya dulu seperti berikut:

<?php

namespace App\Console;

use Illuminate\Support\Facades\Log;
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 = [
        //
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        // $schedule->command('inspire')->hourly();
        $schedule->call(function () {
            Log::info('Task Schedule by sangcahaya.id at : ' . date('Y-m-d H:i:s'));
        })->everyMinute();
    }

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

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

Coba kalian perhatikan pada baris ke-29, saya menulis sebuah task schedule yang didalam nya terdapat perintah untuk mencatat Log..

Dengan perintah ->everyMinute(), maka task schedule tersebut akan terus dijalankan pada setiap menit..

Menjalankan pada server lokal

Untuk menjalankan nya pada server lokal, kalian hanya perlu menjalankan perintah berikut:

php artisan schedule:work

Jika berhasil running, maka hasilnya seperti berikut:

Membuat Cron Job Task Schedule Pada Laravel

Menjalankan Pada Server Hosting Dengan Cron Job

Untuk menjalankan Task Schedule pada server hosting tak semudah seperti kita menjalankan nya pada server lokal yang hanya menggunakan perintah artisan..

Kalo pada server hosting kita memerlukan sebuah cron job..

Jadi sekarang kalian buka dulu menu cron job pada akun cpanel kalian..

Membuat Cron Job Task Schedule Pada Laravel

Kemudian silahkan buat cron job baru dengan ketentuan seperti berikut:

Membuat Cron Job Task Schedule Pada Laravel

 

Pada bagian Common Settings, kalian wajib memilih once per minute..

Apa beda nya frekuensi waktu yg ada di cron job cpanel dengan frekuensi waktu yang ada di aplikasi laravel nya?

Kalau frekuensi waktu yang didalam aplikasi laravel kita adalah untuk menentukan jadwal waktu task schedule nya..

Sementara frekuensi waktu yang ada pada cron job cpanel nya digunakan untuk membaca file kernel.php nya, oleh karena itu wajib kita set once per minute agar kemungkinan tidak ada task yang terlewati..

Kemudian pada bagian inputan command kalian isi seperti berikut, kita mengarahkan nya kedalam file artisan:

/usr/local/bin/php /home/u8939843/aplikasi_laravel_ku/artisan schedule:run >> /dev/null 2>&1

Yang perlu kalian ubah adalah pada bagian “../home/u8939843/aplikasi_laravel_ku/artisan..”, silahkan kalian arahkan ke path folder aplikasi laravel nya..

Setelah cron job nya terpasang, kalian seharusnya sudah bisa melihat hasilnya, berikut adalah contoh hasil nya:

Membuat Cron Job Task Schedule Pada Laravel

Pada gambar diatas menunjukkan bahwa fungsi dari cron job nya sudah berjalan..

Mudah bukan?

Support Us

Jika artikel ini bermanfaat untuk kamu, membantu menyelesaikan masalah yang sedang kamu hadapi, kamu juga bisa dukung kami dengan mengunjungi halaman berikut: https://saweria.co/sangcahayaid

Terima kasih..

Leave a Reply

Your email address will not be published. Required fields are marked *

%d bloggers like this: