Sunday 18 July 2021

Menjalankan Cron Job Laravel di Docker Container

menjalankan cron job di docker container - Cron Job adalah program yang memungkinkan kita dapat menjalankan perintah secara otomatis dan terjadwal. Di Laravel sendiri, terdapat layanan Task Schedule yang dapat dihubungkan dengan cron job di server. Berikut ini adalah trik untuk menjalankan cron job di dalam docker container.

1. Buat Schedule.

Saya akan membuat schedule sederhana, yang mana setiap 1 menit sekali, saya akan me-request endpoint API getUser menggunakan curl.

app/Console/Kernel.php

<?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->exec('curl -s http://localhost:8000/api/getUser')->everyMinute();
    }

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

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


2. Buat file bernama crontab (untuk di-copy ke container).

/crontab

* * * * * (lokasi php) (lokasi file artisan) schedule:run >> /var/log/cron.log 2>&1
# line kosong, jangan dihapus

contoh:

/crontab
* * * * * /usr/local/bin/php /var/www/artisan schedule:run >> /var/log/cron.log 2>&1
# line kosong, jangan dihapus


3. Edit Dockerfile.

Pada file Dockerfile, sisipkan perintah berikut ini untuk apply cron job yang sudah dibuat.

/Dockerfile

# install cron dan crontab
RUN apt install cron

# copy file crontab ke direktori cron.d
COPY crontab /etc/cron.d/crontab

# masuk sebagai root
USER root

# beri akses eksekusi crontab
RUN chmod 0644 /etc/cron.d/crontab

# apply cron job
RUN crontab /etc/cron.d/crontab

# buat log file
RUN touch /var/log/cron.log

# jalankan command cron ketika container sudah berjalan
CMD cron && tail -f /var/log/cron.log

Setelah semua selesai, cron sudah berjalan ketika container dijalankan. Server akan menjalankan perintah sesuai dengan Laravel Schedule. Untuk melihat log cron job yang sedang berjalan, silahkan akses /var/log/cron.log di container. Bisa dengan docker / docker-compose exec.

Oke sekian artikel kali ini tentang cara menjalankan cron job laravel task scheduling di docker, semoga bermanfaat. Terima kasih!

0 komentar

Post a Comment

Hai, Mohon Komentar Yang Relevan Dan Tidak OOT!