Tutorial 23 Jul 2026 38 Kali Dibaca

Cara Menjalankan Laravel Scheduler Menggunakan Cron Job cPanel

Gugun Nurdiansyah
Penulis
Cara Menjalankan Laravel Scheduler Menggunakan Cron Job cPanel

Apa Itu Laravel Scheduler?

Laravel Scheduler adalah fitur untuk mengatur pekerjaan otomatis langsung dari aplikasi Laravel.

Dengan fitur ini, pengembang dapat menentukan kapan sebuah perintah harus dijalankan tanpa membuat banyak konfigurasi cron secara terpisah.

Laravel Scheduler dapat digunakan untuk berbagai kebutuhan, seperti:

  1. Mengirim email pengingat.

  2. Memperbarui status pesanan.

  3. Membuat laporan harian.

  4. Menghapus data sementara.

  5. Menjalankan backup.

  6. Memeriksa pembayaran.

  7. Mengirim notifikasi.

  8. Menonaktifkan akun kedaluwarsa.

  9. Menyinkronkan data melalui API.

  10. Memproses pekerjaan rutin.

Laravel hanya membutuhkan satu cron job pada server. Cron tersebut menjalankan perintah schedule:run setiap menit, sedangkan jadwal setiap pekerjaan tetap dikelola dari source code aplikasi. (Laravel)

Perbedaan Laravel Scheduler dan Cron Job

Cron Job merupakan fitur pada sistem operasi atau hosting untuk menjalankan perintah pada waktu tertentu.

Laravel Scheduler merupakan pengatur jadwal yang berada di dalam aplikasi Laravel.

Alur kerjanya adalah sebagai berikut:

  1. Cron Job cPanel berjalan setiap menit.

  2. Cron menjalankan php artisan schedule:run.

  3. Laravel memeriksa seluruh jadwal yang terdaftar.

  4. Laravel hanya menjalankan tugas yang waktunya sudah sesuai.

  5. Tugas lain akan dilewati sampai jadwal berikutnya.

Dengan cara tersebut, Anda tidak perlu membuat satu cron job untuk setiap perintah aplikasi.

Cukup buat satu cron job untuk Laravel, kemudian atur seluruh jadwal melalui source code.

Lokasi Penulisan Scheduler Laravel

Lokasi konfigurasi scheduler bergantung pada versi dan struktur Laravel yang digunakan.

Laravel 11, 12, dan 13

Pada Laravel modern, jadwal biasanya ditulis di:

routes/console.php

Contoh:

<?php

use Illuminate\Support\Facades\Schedule;

Schedule::command('report:daily')->dailyAt('08:00');

Laravel juga menyediakan opsi untuk mendefinisikan jadwal melalui withSchedule di dalam bootstrap/app.php. (Laravel)

Laravel 10 dan Versi Sebelumnya

Pada Laravel 10 dan versi sebelumnya, jadwal umumnya ditulis di:

app/Console/Kernel.php

Contoh:

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    protected function schedule(Schedule $schedule): void
    {
        $schedule->command('report:daily')->dailyAt('08:00');
    }
}

Laravel 10 menggunakan metode schedule di dalam App\Console\Kernel untuk mendaftarkan pekerjaan terjadwal. (Laravel)

Contoh Jadwal Laravel

Berikut beberapa contoh jadwal yang sering digunakan.

Menjalankan Perintah Setiap Menit

Schedule::command('payment:check')->everyMinute();

Menjalankan Perintah Setiap Lima Menit

Schedule::command('order:update')->everyFiveMinutes();

Menjalankan Perintah Setiap Jam

Schedule::command('stock:sync')->hourly();

Menjalankan Perintah Setiap Hari

Schedule::command('report:daily')->daily();

Secara default, daily() menjalankan tugas setiap hari pada tengah malam.

Menjalankan Perintah pada Jam Tertentu

Schedule::command('report:daily')->dailyAt('08:00');

Menjalankan Perintah Setiap Hari Senin

Schedule::command('report:weekly')
    ->weeklyOn(1, '08:00');

Menjalankan Perintah Setiap Awal Bulan

Schedule::command('invoice:generate')
    ->monthlyOn(1, '07:00');

Laravel menyediakan berbagai pilihan frekuensi, mulai dari setiap menit, setiap jam, harian, mingguan, bulanan, hingga jadwal cron khusus. (Laravel)

Cara Memeriksa Jadwal yang Terdaftar

Sebelum mengatur Cron Job di cPanel, masuk ke folder utama Laravel melalui Terminal atau SSH.

Contoh:

cd /home/username/laravel-app

Kemudian jalankan:

php artisan schedule:list

Perintah tersebut akan menampilkan daftar tugas yang terjadwal beserta waktu eksekusi berikutnya.

Contoh hasil:

0 8 * * *   php artisan report:daily
*/5 * * * * php artisan order:update

Jika tugas yang dibuat belum muncul, periksa kembali file:

routes/console.php

atau:

app/Console/Kernel.php

sesuai versi Laravel yang digunakan.

Menguji Scheduler Secara Manual

Sebelum memasang cron, jalankan:

php artisan schedule:run

Perintah ini akan memeriksa dan menjalankan tugas yang sedang jatuh tempo.

Apabila muncul:

No scheduled commands are ready to run.

pesan tersebut belum tentu menunjukkan error. Artinya, pada saat pengujian tidak ada jadwal yang waktunya sesuai.

Untuk pengujian, Anda dapat membuat jadwal sementara:

Schedule::call(function () {
    logger('Scheduler berhasil dijalankan');
})->everyMinute();

Kemudian jalankan:

php artisan schedule:run

Periksa hasilnya melalui:

storage/logs/laravel.log

Setelah pengujian selesai, hapus jadwal sementara tersebut.

Mengetahui Lokasi Project Laravel

Cron Job membutuhkan path lengkap atau absolute path menuju file artisan.

Struktur hosting dapat terlihat seperti berikut:

/home/username/laravel-app
/home/username/public_html

Source code Laravel berada di:

/home/username/laravel-app

Sedangkan isi folder public berada di:

/home/username/public_html

Dalam kondisi tersebut, lokasi file artisan adalah:

/home/username/laravel-app/artisan

Jangan menggunakan:

/home/username/public_html/artisan

jika file artisan memang tidak berada di dalam public_html.

Untuk memastikan lokasi project, jalankan:

pwd

Pastikan Anda berada pada folder yang memiliki file berikut:

artisan
composer.json
app
bootstrap
config
routes
vendor

Mengetahui Lokasi PHP di cPanel

Selain lokasi artisan, Anda perlu mengetahui lokasi PHP yang digunakan oleh server.

Jalankan:

which php

Contoh hasil:

/usr/local/bin/php

Periksa versinya:

php -v

Pada server cPanel, binary PHP juga dapat berada di lokasi seperti:

/opt/cpanel/ea-php82/root/usr/bin/php
/opt/cpanel/ea-php83/root/usr/bin/php
/opt/cpanel/ea-php84/root/usr/bin/php

Gunakan versi PHP yang sesuai dengan aplikasi Laravel.

Sebagai contoh, jika website menggunakan PHP 8.4, perintah cron dapat menggunakan:

/opt/cpanel/ea-php84/root/usr/bin/php

Versi PHP domain dapat diperiksa melalui menu:

cPanel → MultiPHP Manager

Cara Membuat Cron Job Laravel di cPanel

Ikuti langkah berikut.

Langkah 1: Buka Menu Cron Jobs

Masuk ke cPanel, kemudian buka:

Advanced → Cron Jobs

cPanel menyediakan menu tersebut untuk membuat tugas yang berjalan berdasarkan waktu atau interval tertentu. (cPanel & WHM Documentation)

Langkah 2: Pilih Jadwal Every Minute

Pada bagian Add New Cron Job, isi jadwal berikut:

Minute: *
Hour: *
Day: *
Month: *
Weekday: *

Format tersebut berarti cron dijalankan setiap menit.

Dalam format cron lengkap, hasilnya adalah:

* * * * *

Cron tetap harus dijalankan setiap menit meskipun tugas Laravel hanya dijadwalkan sekali sehari.

Laravel akan memeriksa sendiri apakah suatu tugas sudah waktunya dijalankan.

Langkah 3: Masukkan Perintah Cron

Contoh jika PHP berada di /usr/local/bin/php:

/usr/local/bin/php /home/username/laravel-app/artisan schedule:run >> /dev/null 2>&1

Contoh jika menggunakan PHP 8.4 dari cPanel:

/opt/cpanel/ea-php84/root/usr/bin/php /home/username/laravel-app/artisan schedule:run >> /dev/null 2>&1

Ganti:

username

dengan username akun cPanel.

Ganti:

laravel-app

dengan nama folder project Laravel.

cPanel menyarankan penggunaan absolute path pada perintah cron agar file dan command dapat ditemukan dengan benar. (cPanel & WHM Documentation)

Langkah 4: Simpan Cron Job

Klik:

Add New Cron Job

Setelah tersimpan, perintah akan muncul pada bagian:

Current Cron Jobs

Alternatif Perintah Menggunakan cd

Selain langsung memanggil file artisan, cron dapat dijalankan dengan masuk ke folder project terlebih dahulu.

Contohnya:

cd /home/username/laravel-app && /usr/local/bin/php artisan schedule:run >> /dev/null 2>&1

Untuk PHP 8.4:

cd /home/username/laravel-app && /opt/cpanel/ea-php84/root/usr/bin/php artisan schedule:run >> /dev/null 2>&1

Format ini berguna apabila perintah yang dijalankan membutuhkan working directory dari project Laravel.

Fungsi /dev/null 2>&1

Pada akhir perintah terdapat bagian:

>> /dev/null 2>&1

Bagian tersebut digunakan untuk membuang output standar dan pesan error agar cPanel tidak mengirim email setiap menit.

cPanel menjelaskan bahwa penambahan /dev/null 2>&1 dapat digunakan untuk menonaktifkan notifikasi email dari satu cron job. (cPanel & WHM Documentation)

Namun, ketika masih melakukan pengujian, sebaiknya simpan output ke file log terlebih dahulu.

Contoh:

/usr/local/bin/php /home/username/laravel-app/artisan schedule:run >> /home/username/scheduler.log 2>&1

Dengan cara tersebut, hasil cron dapat diperiksa melalui:

/home/username/scheduler.log

Setelah scheduler dipastikan berjalan normal, perintah dapat dikembalikan menjadi:

/usr/local/bin/php /home/username/laravel-app/artisan schedule:run >> /dev/null 2>&1

Menyimpan Log Scheduler ke Folder Laravel

Output cron juga dapat disimpan ke folder log aplikasi:

/usr/local/bin/php /home/username/laravel-app/artisan schedule:run >> /home/username/laravel-app/storage/logs/scheduler.log 2>&1

Pastikan folder berikut dapat ditulis:

storage/logs

Contoh permission yang umum digunakan:

chmod -R 775 storage
chmod -R 775 bootstrap/cache

Pengaturan permission harus disesuaikan dengan ownership dan konfigurasi server.

Jangan langsung menggunakan permission 777 untuk seluruh folder aplikasi.

Mengatur Timezone Scheduler

Perbedaan timezone sering menyebabkan tugas berjalan pada jam yang tidak sesuai.

Untuk waktu Indonesia bagian barat, gunakan:

Asia/Jakarta

Periksa file:

config/app.php

Pada project yang mendukung environment variable, konfigurasinya dapat berupa:

'timezone' => env('APP_TIMEZONE', 'UTC'),

Kemudian tambahkan ke .env:

APP_TIMEZONE=Asia/Jakarta

Jika project tidak menggunakan APP_TIMEZONE, sesuaikan langsung pada konfigurasi:

'timezone' => 'Asia/Jakarta',

Setelah mengubah timezone, jalankan:

php artisan optimize:clear

Laravel juga memungkinkan timezone ditentukan pada tugas tertentu:

Schedule::command('report:daily')
    ->dailyAt('08:00')
    ->timezone('Asia/Jakarta');

Laravel mendukung pengaturan timezone untuk tugas terjadwal melalui metode timezone. (Laravel)

Mencegah Tugas Berjalan Bersamaan

Sebuah tugas mungkin membutuhkan waktu lebih dari satu menit untuk selesai.

Jika cron berjalan kembali sebelum proses sebelumnya selesai, tugas dapat berjalan dua kali secara bersamaan.

Gunakan:

Schedule::command('report:generate')
    ->everyFiveMinutes()
    ->withoutOverlapping();

withoutOverlapping() membantu mencegah eksekusi berikutnya dimulai ketika proses sebelumnya masih berjalan.

Contoh lain:

Schedule::command('stock:sync')
    ->hourly()
    ->withoutOverlapping(30);

Angka 30 menunjukkan waktu kedaluwarsa lock dalam satuan menit.

Pastikan cache driver aplikasi dapat digunakan karena fitur pencegahan overlap bergantung pada mekanisme lock.

Menjalankan Scheduler pada Satu Server

Jika aplikasi berjalan pada beberapa server, gunakan:

Schedule::command('report:daily')
    ->dailyAt('08:00')
    ->onOneServer();

Fitur ini mencegah tugas yang sama dijalankan oleh setiap server.

Untuk shared hosting dengan satu server aplikasi, konfigurasi tersebut biasanya tidak diperlukan.

Perbedaan Scheduler dan Queue Worker

Laravel Scheduler dan Queue Worker memiliki fungsi yang berbeda.

Scheduler menentukan kapan sebuah tugas dimulai.

Queue Worker memproses pekerjaan yang masuk ke antrean.

Sebagai contoh:

Schedule::job(new SendDailyReport)->dailyAt('08:00');

Scheduler akan memasukkan job ke antrean pada pukul 08.00.

Jika .env menggunakan:

QUEUE_CONNECTION=database

atau:

QUEUE_CONNECTION=redis

job tersebut tetap membutuhkan queue worker agar benar-benar diproses.

Scheduler yang aktif tidak otomatis berarti queue worker juga aktif.

Pada cPanel yang tidak menyediakan Supervisor, queue dapat diproses melalui cron terpisah:

/usr/local/bin/php /home/username/laravel-app/artisan queue:work --stop-when-empty >> /dev/null 2>&1

Cron tersebut dapat dijalankan setiap menit.

Namun, metode terbaik tetap bergantung pada dukungan hosting, jenis queue, dan volume pekerjaan aplikasi.

Cara Memastikan Cron Job Berjalan

Gunakan beberapa metode berikut.

Periksa Jadwal Laravel

Jalankan:

php artisan schedule:list

Pastikan tugas muncul dan jadwalnya benar.

Jalankan Scheduler Manual

php artisan schedule:run

Jika perintah manual berhasil, tetapi cron tidak berjalan, masalah kemungkinan berada pada path PHP, path project, atau konfigurasi Cron Jobs cPanel.

Simpan Output ke File Log

Gunakan sementara:

/usr/local/bin/php /home/username/laravel-app/artisan schedule:run >> /home/username/scheduler.log 2>&1

Tunggu beberapa menit, lalu periksa file log.

Tambahkan Log pada Tugas

Schedule::call(function () {
    logger('Scheduler aktif: '.now());
})->everyMinute();

Periksa:

storage/logs/laravel.log

Periksa Cron Email

Pada menu Cron Jobs, tambahkan alamat email sementara pada bagian:

Cron Email

cPanel dapat mengirimkan output cron ke alamat tersebut. (cPanel & WHM Documentation)

Penyebab Laravel Scheduler Tidak Berjalan

Path PHP Salah

Contoh perintah yang gagal:

php /home/username/laravel-app/artisan schedule:run

Cron memiliki environment yang lebih terbatas dibandingkan terminal biasa. Karena itu, gunakan path PHP lengkap:

/usr/local/bin/php

atau:

/opt/cpanel/ea-php84/root/usr/bin/php

Path Artisan Salah

Pastikan file berikut benar-benar tersedia:

/home/username/laravel-app/artisan

Jangan mengarahkannya ke public_html apabila source Laravel berada di folder lain.

Versi PHP Tidak Sesuai

PHP terminal atau cron dapat berbeda dari versi PHP domain.

Periksa menggunakan:

php -v

Kemudian gunakan binary PHP yang sesuai.

Tugas Belum Terdaftar

Jalankan:

php artisan schedule:list

Jika tugas tidak muncul, periksa lokasi penulisan scheduler.

Cache Konfigurasi Lama

Jalankan:

php artisan optimize:clear

Setelah aplikasi normal pada production, buat kembali cache:

php artisan optimize

Timezone Tidak Sesuai

Periksa timezone aplikasi dan server.

Gunakan:

APP_TIMEZONE=Asia/Jakarta

jika konfigurasi project mendukungnya.

Permission Storage Bermasalah

Pastikan folder berikut dapat ditulis:

storage
bootstrap/cache

Cron Job Tidak Tersimpan

Periksa bagian:

Current Cron Jobs

Pastikan perintah sudah muncul.

Hosting Membatasi Cron Setiap Menit

Sebagian penyedia hosting dapat membatasi frekuensi cron.

Laravel secara resmi mengandalkan schedule:run setiap menit. Jika opsi setiap menit tidak tersedia, hubungi penyedia hosting untuk memastikan batas minimum yang diperbolehkan. (Laravel)

Contoh Cron Job Berdasarkan Struktur Hosting

Source Laravel di Luar public_html

Struktur:

/home/username/OVLAWEB
/home/username/public_html

Gunakan:

/opt/cpanel/ea-php84/root/usr/bin/php /home/username/OVLAWEB/artisan schedule:run >> /dev/null 2>&1

Laravel Berada di Subdomain

Struktur:

/home/username/app.domainanda.com

Gunakan:

/usr/local/bin/php /home/username/app.domainanda.com/artisan schedule:run >> /dev/null 2>&1

Pastikan lokasi tersebut merupakan root Laravel, bukan hanya folder public.

Seluruh Project Berada di public_html

Jika file artisan memang berada di:

/home/username/public_html/artisan

gunakan:

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

Walaupun dapat berjalan, menempatkan seluruh source Laravel di folder publik bukan struktur yang paling aman. Sebaiknya hanya folder public yang dapat diakses melalui web.

Kesalahan yang Perlu Dihindari

Membuat Cron untuk Setiap Tugas

Jangan membuat cron terpisah untuk setiap perintah jika seluruh jadwal sudah dikelola Laravel.

Cukup gunakan satu cron:

php artisan schedule:run

Menjalankan Cron Satu Kali Sehari

Cron Laravel harus dipanggil setiap menit agar Laravel dapat memeriksa jadwal secara tepat.

Menggunakan Path Relatif

Hindari:

php artisan schedule:run

tanpa lokasi project yang jelas.

Gunakan absolute path agar lebih stabil.

Langsung Membuang Semua Output

Saat pengujian, jangan langsung menggunakan /dev/null.

Simpan output ke file log agar error dapat ditemukan.

Menganggap Queue Ikut Berjalan

Scheduler dan queue worker merupakan proses berbeda.

Jika tugas mengirim job ke queue, pastikan queue worker tersedia.

Tidak Mengatur Timezone

Timezone yang salah dapat membuat laporan, notifikasi, dan proses lain berjalan pada jam yang tidak sesuai.

Membuat Tugas Berat Setiap Menit

Tugas yang membutuhkan waktu lama dapat menumpuk dan menurunkan performa server.

Gunakan jadwal yang wajar dan tambahkan withoutOverlapping() jika diperlukan.

Checklist Laravel Scheduler di cPanel

Sebelum menyelesaikan konfigurasi, pastikan:

  1. Tugas muncul pada php artisan schedule:list.

  2. php artisan schedule:run berhasil dijalankan manual.

  3. Lokasi file artisan sudah benar.

  4. Path PHP menggunakan lokasi lengkap.

  5. Versi PHP sesuai dengan Laravel.

  6. Cron menggunakan jadwal * * * * *.

  7. Cron muncul pada Current Cron Jobs.

  8. Timezone aplikasi sudah sesuai.

  9. Folder storage dapat ditulis.

  10. Cache konfigurasi sudah dibersihkan.

  11. Output cron sudah diperiksa.

  12. Queue worker tersedia jika diperlukan.

  13. Tugas berat menggunakan withoutOverlapping().

  14. Cron email atau log dinonaktifkan setelah sistem stabil.

Bantuan Laravel dari Ovla Media

Konfigurasi Laravel Scheduler merupakan salah satu bagian penting dalam menjalankan aplikasi bisnis secara otomatis.

Ovla Media menyediakan layanan pengembangan, deployment, perbaikan, dan pemeliharaan aplikasi Laravel.

Layanan yang dapat disesuaikan meliputi:

  1. Konfigurasi Laravel Scheduler.

  2. Pengaturan Cron Job cPanel.

  3. Konfigurasi queue worker.

  4. Otomatisasi laporan.

  5. Pengingat pembayaran.

  6. Sinkronisasi API.

  7. Konfigurasi email dan notifikasi.

  8. Deployment Laravel ke cPanel.

  9. Deployment Laravel ke VPS.

  10. Perbaikan error Laravel.

  11. Optimasi aplikasi production.

  12. Pengembangan aplikasi bisnis custom.

Kesimpulan

Laravel Scheduler membantu aplikasi menjalankan pekerjaan otomatis berdasarkan waktu yang telah ditentukan.

Untuk menjalankannya pada cPanel, buat satu Cron Job yang aktif setiap menit:

* * * * *

Gunakan perintah dengan absolute path:

/usr/local/bin/php /home/username/laravel-app/artisan schedule:run >> /dev/null 2>&1

Jika hosting menggunakan PHP cPanel tertentu, gunakan binary yang sesuai:

/opt/cpanel/ea-php84/root/usr/bin/php /home/username/laravel-app/artisan schedule:run >> /dev/null 2>&1

Sebelum mengaktifkan cron, periksa jadwal menggunakan:

php artisan schedule:list

Kemudian lakukan pengujian:

php artisan schedule:run

Jika cron tidak berjalan, periksa path PHP, lokasi file artisan, versi PHP, timezone, permission, cache, dan output log.

Dengan konfigurasi yang benar, Laravel Scheduler dapat menjalankan laporan, notifikasi, sinkronisasi data, dan berbagai proses otomatis tanpa harus dijalankan secara manual.

Konsultasi & Solusi

Butuh implementasi untuk kebutuhan bisnis?

OVLA Media membantu pengembangan dan optimasi aplikasi web, integrasi sistem, serta solusi Laravel sesuai kebutuhan perusahaan Anda.

#Laravel Scheduler #Cron Job Laravel #Cron Job cPanel #Laravel cPanel #Schedule Run Laravel #Laravel Hosting #Laravel Shared Hosting #PHP Artisan #Task Scheduling Laravel #Laravel Automation #Laravel Queue #Queue Worker Laravel #Cron cPanel #Scheduler Laravel Tidak Berjalan #Laravel Production #Laravel Deployment #Web Development #PHP Developer #Laravel Developer Indonesia #Ovla Media #Jasa Laravel #Jasa Deployment Laravel #Jasa Perbaikan Laravel
Beranda Produk Artikel
Konsultasi
OVLA

Navigasi Utama

Hubungi Kami

Mulai Konsultasi Sekarang