tutorial laravel

Cron Job Laravel Windows, Otomatisasi Script Menggunakan Task Scheduler

Cron Job Laravel Windows – Pada kali ini kita akan membahas bagaimana cara membuat sebuah cron atau sebuah task scheduling menggunakan laravel di operating system berbasis windows. Sebetulnya hal ini tidak lumrah, karena biasanya aplikasi berbasis laravel akan di host pada os berbasis linux dan untuk otomatisasi task-nya menggunakan scheduler system bawaan linux (konfigurasi-nya menggunakan perintah crontab -e), namun sebagai bahan referensi kali ini kita akan membuat Cron Job Laravel pada OS Windows.

Baca juga cara membuat aplikasi web, web service & aplikasi android :  https://soft-gain.com/2019/10/17/laravel-aplikasi-inventory-barang-berbasis-web/

Goals – Membuat Cron Job Dengan Laravel Pada OS Windows

Pada artikel ini kita akan mencoba membuat dan memahami bagaimana cara men-otomatisasi sebuah task menggunakan laravel pada os windows. Kita akan mempelajari langkah demi langkah pembuatan task dengan laravel (untuk detail-nya bisa dilihat di-dokumentasi resminya : https://laravel.com/docs/7.x/scheduling#scheduling-queued-jobs), dan memanfaatkan fitur task scheduler pada windows sebagai agent untuk menjalankan otomatisasi script.

Materi

Pertama-tama masukan perintah berikut ini untuk membuat sebuah command baru :

php artisan make:command belajarMembuatCron

Maka secara otomatis akan ter-generate sebuah file baru belajarMembuatCron.php didalam folder Console/Commands, buka file tersebut dan isi seperti ini :

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class belajarMembuatCron extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'sg:belajar-membuat-cron';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Hanya ingin belajar membuat cron';

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

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        echo 'Cron kita sudah jalan!';
        \Log::info('Cron kita sudah jalan!');
    }
}

Perlu diperhatikan, pada $signature adalah nama command yang akan kita gunakan saat hendak menjalankan perintah, pada $description kita isikan deskripsi task ini dijalankan untuk tujuan apa (penting juga untuk mengisi deskripsi saat kita bekerja secara tim, supaya teman kita tidak bingung command ini berfungsi untuk apa), pada function handle kita isikan script yang hendak di eksekusi saat command ini dijalankan (pada contoh ini kita hanya akan menampilkan pesan saja pada layar command line dan men-print string pada file laravel.log -> dengan perintah \Log::info(), pada case yang lebih serius bagian ini bisa diisikan script yang lebih complex).

Berikutnya ubah file kernel.php menjadi seperti ini :

<?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 = [
        //
    ];

    /**
     * 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('sg:belajar-membuat-cron')->everyMinute();
    }

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

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

Kita akan menambahkan command yang baru saja kita buat pada fungsi schedule, dibagian ini :

$schedule->command('sg:belajar-membuat-cron')->everyMinute(); 

Dimana didalam method command kita mendeklarasikan perintah yang sudah kita buat dalam $signature sebelumnya lalu kita memanggil fungsi ->everyMinute(); yang artinya kita hendak menjalankan perintah ini setiap menit.

Setelah itu coba jalankan perintah yang baru saja kita buat seperti gambag dibawah ini :

tutorial laravel artisan command
Contoh Artisan Command

Jika pada file laravel.log juga ter-print seperti gambar dibawah ini, berarti untuk proses pembuatan perintah menggunakan laravel telah berhasil kita lakukan :

tutorial laravel artisan command
Hasil print \Log::info()

Berikutnya, kita akan mencoba menjalankan perintah diatas secara otomatis dengan memanfaatkan task scheduler pada windows. Pertama-tama kita perlu membuat sebuah batch file yang akan berisi script untuk men-eksekusi perintah php yang sudah kita buat sebelumnya.

Buka notepad biasa dan masukan code dibawah ini :

cd D:\xampp\htdocs\belajar-laravel
D:
php artisan schedule:run

Harap disesuaikan dengan dimana root project Anda disimpan (disini saya menyimpannya didalam d:/xampp/htdocs/belajar-laravel), lalu save file tersebut dengan ekstensi .bat (contoh : laravel-belajar-cron.bat). Untuk men-test file batch yang kita buat sudah benar atau belum tinggal di double click saja batch file yang barusan kita buat dan kita cek file laravel.log kita, jika sudah ter-print pesan sukses artinya kita telah berhasil dalam proses pembuatan batch file.

Selanjutnya kita akan men-kofigurasi task scheduler untuk dapat men-eksekusi batch file yang sudah kita buat sebelumnya, pertama buka task scheduler lalu pada bagian action, pilih create basic task :

Cron Job Laravel Windows
Create Basic Task

Isikan nama dan deskripsi untuk task yang akan kita buat lalu klik next :

Cron Job Laravel Windows
Pilih daily trigger

Pada Bagian diatas, pilih Daily dulu saja lalu klik next :

Cron Job Laravel Windows
Konfigurasi daily task

Pada bagian ini langsung klik next dulu saja :

Cron Job Laravel Windows
Pilih metode action

Pada bagian ini pilih start program karena kita akan menggunakan batch file yang sudah kita buat sebelumnya lalu klik next :

laravel cron task scheduler
Browse batch file

Pada bagian diatas pilih batch file (saya menaruh batch file yang sudah kita buat pada folder project agar mudah ditemukan, pada praktek-nya batch file bisa di taruh dimana saja dengan catatan tidak didalam folder yang membutuhkan permission khusus saat hendak di eksekusi) lalu klik next lalu finish :

Jika berhasil maka task yang baru saja kita buat akan muncul dalam Task scheduler Library :

laravel cron task scheduler
Berhasil dibuat

Silahkan double klik task yang sudah kita buat karena kita akan melakukan sedikit perubahan, dibagian tab general silahkan di check pada bagian Run With Highest Privileges :

laravel cron task scheduler
Run With Highest Privileges

Berikutnya buka pada bagian tab trigger lalu klik edit pada bagian task yang baru kita buat, silahkan disesuaikan dengan gambar dibawah untuk men-eksekusi task setiap satu menit :

laravel cron task scheduler
Run every one minutes

Untuk bagian diatas bisa disesuaikan sesuai kebutuhan mau dijalankan dengan interval seperti apa task yang sudah kita buat, klik ok.

Terakhir kita buka lagi menu Task scheduler Library, klik kanan task yang sudah kita buat lalu pilih run. Jika berhasil maka task yang sudah kita buat sebelumnya akan di-eksekusi setiap satu menit, seperti contoh dibawah ini :

laravel cron task scheduler
Berjalan dengan interval satu menit

Bisa dilihat diatas, pada file laravel.log kita telah berhasil menjalankan cron laravel dengan memanfaatkan task scheduler pada windows dengan interval per satu menit.

Penutup

Kita telah berhasil memanfaatkan task scheduler pada windows untuk menjalankan cron pada laravel, namun lagi ini bukanlah suatu hal yang akan sering kita jumpai, karena lumrahnya laravel itu sendiri di host pada os linux dan kita tinggal men-konfigurasi menggunakan perintah crontab -e untuk menjalankan cron laravel yang sudah kita buat. Mostly sama saja, hanya peran task scheduler yang digantikan oleh system automatic task bawaan linux. Kiranya demikian saja semoga dapat bermanfaat bagi rekan-rekan yang sedang mencari alternatif penggunaan cron laravel pada os windows, terima kasih.

2 thoughts on “Cron Job Laravel Windows, Otomatisasi Script Menggunakan Task Scheduler

  1. Fungsi every minute pada “$schedule->command(‘sg:belajar-membuat-cron’)->everyMinute();” ini apa ya gan kalau di windows scheduler juga harus setting 1 menit?

    1. halo gan, ijin menjelaskan ya maaf bila penjelasan saya kurang jelas. Itu perintah yang digunakan untuk meng-eksekusi job tertentu setiap menitnya. Betul, sebaiknya windows scheduler juga di setting jalan setiap menit. Terima Kasih

Leave a Reply

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