Memulai Web Development dengan Laravel - Jadwal Script Kamu dengan Task Scheduler

Muhammad Arslan 29 Mei 2017

Memulai Web Development dengan Laravel - Jadwal Script Kamu dengan Task Scheduler

Terkadang menulis script yang dijadwal di Cron memang agak menyakitkan. Selain sering error, kita pun sulit untuk mengetahui error apa yang muncul bila ada kesalahan pada saat menjadwalkan script kita.

Laravel memiliki sebuah fitur yang dinamakan Task Scheduler, kamu dapat membuat berbagai script dengan menggunakan kode PHP, dan menjadwalkannya sesuai kebutuhan. Walaupun begitu, Task Scheduler si Laravel ini masih membutuhkan Cron untuk menjalankan scheduler-nya.

Berikut ini adalah beberapa method yang dapat digunakan di Task Scheduler:

->cron('* * * * * *');, 	Run the task on a custom Cron schedule
->everyMinute();,	Run the task every minute
->everyFiveMinutes();,	Run the task every five minutes
->everyTenMinutes();,	Run the task every ten minutes
->everyThirtyMinutes();, Run the task every thirty minutes
->hourly();,	Run the task every hour
->hourlyAt(17);,	Run the task every hour at 17 mins past the hour
->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 week
->monthly();, Run the task every month
->monthlyOn(4, '15:00');, Run the task every month on the 4th at 15:00
->quarterly();, Run the task every quarter
->yearly();, Run the task every year
->timezone('America/New_York');, Set the timezone

Sekarang mari kita coba membuat sebuah task sederhana dengan menggunakan Task Scheduler di Laravel.

##Persiapan

Kita akan membuat dua buah task, task pertama melakukan insert ke tabel log setiap satu menit sekali, sedangkan task kedua melakukan insert ke tabel log setiap lima menit sekali.

Diasumsikan kamu sudah memiliki database MySQL yang terpasang di komputer kamu, dan kode proyek Laravel yang sudah terpasang di /var/www/html dengan nama laraweb.

Berikut adalah kode untuk tabel logs yang dapat kamu simpan di database yang sudah kamu miliki:

CREATE TABLE `logs` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `log` text,
  `url` text,
  `created_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=223 DEFAULT CHARSET=utf8;

Sedangkan berikut ini adalah kode task yang ditulis di dalam method schedule() di class App\Console\Kernel.php:

protected function schedule(Schedule $schedule)
{
    $schedule->call(function () {

        DB::table('logs')->insert([
            'url' => "http://www.example.com/demo-scheduler",
            'log' => "This is a message from laravel scheduler with every 1 minute...",
            'created_at' => date("Y-m-d h:i:s")
        ]);

    })->everyMinute();

    $schedule->call(function () {
        DB::table('logs')->insert([
            'url' => "http://www.example.com/demo-scheduler",
            'log' => "This is a message from laravel scheduler with every 5 minute...",
            'created_at' => date("Y-m-d h:i:s")
        ]);

    })->everyFiveMinutes();
}

##Pengaturan di Cron

Untuk menjalankan Task Scheduler Laravel, kamu hanya perlu penambahkan baris berikut di Cron:

* * * * * php /Library/WebServer/Documents/laraweb/artisan schedule:run >> /dev/null 2>&1

Untuk path proyek Laravel yang kamu miliki, harus disesuaikan dengan kode diatas. Jangan sampai path proyek Laravel kamu salah tunjuk di Cron.

##Melihat Hasil

Untuk melihat hasilnya paling tidak kamu perlu menunggu 15 menit untuk melihat hasilnya. Seperti pada gambar berikut, task yang setiap satu menit akan dieksekusi. Sedangkan untuk yang setiap 5 menit, kamu harus menunggu di menit setelah 5 menit:

Image

(arslan)