Cara Setting Cron Job Laravel di Shared Hosting: Tugas Otomatis Tanpa Ribet (Panduan 2026)
Cara Setting Cron Job Laravel di Shared Hosting: Tugas Otomatis Tanpa Ribet (Panduan 2026)
Cron job Laravel di shared hosting hanya membutuhkan satu baris perintah di cPanel yang menjalankan php artisan schedule:run setiap menit. Semua jadwal tugas — backup database harian, laporan penjualan mingguan, pengingat tagihan via WhatsApp — cukup didaftarkan di kode Laravel lewat Task Scheduler. Tanpa SSH, tanpa cron terpisah untuk setiap tugas, dan cara ini berlaku untuk Laravel 10, 11, 12, hingga 13.
Apa itu Laravel Scheduler dan kenapa cron biasa tidak cukup?
Cron di Linux pada dasarnya hanya bisa menjalankan "satu perintah pada satu jadwal". Kalau kamu punya 5 tugas rutin, pendekatan naif berarti 5 entri cron — 5 tempat yang bisa salah, 5 tempat yang harus diubah setiap kali deploy.
Laravel Task Scheduler membalik logika itu: sistem cron hanya memicu satu perintah, schedule:run, setiap menit. Perintah inilah yang mengecek daftar tugas yang kamu daftarkan di kode, lalu menjalankan yang jadwalnya sudah tiba. Hasilnya: satu-satunya hal yang diatur di cPanel adalah jadwal "tiap menit"; logika bisnisnya hidup di kode, ikut ter-versioning di Git, dan bisa diuji di lokal sebelum naik ke server.
Bagaimana cara mendaftarkan tugas terjadwal di Laravel 11/12/13?
Sejak Laravel 11, pendaftaran jadwal tidak lagi memakai app/Console/Kernel.php (file itu sudah dihapus dari struktur default), melainkan file routes/console.php dengan facade Schedule:
Kalau project-mu masih Laravel 10 atau lebih lama, logika yang sama ditulis di method schedule() pada app/Console/Kernel.php — cara kerjanya identik.
Beberapa pilihan frekuensi yang paling sering dipakai: everyMinute(), everyFiveMinutes(), hourly(), daily(), weekly(), monthly(), dailyAt('02:00'), dan cron('0 8 * * *') untuk ekspresi cron mentah.
Catatan zona waktu yang sering dilupakan: jadwal Laravel mengikuti APP_TIMEZONE di file .env, dan banyak hosting tetap memakai UTC kecuali kamu ubah. Pastikan baris ini ada:
Atau tempelkan ->timezone('Asia/Jakarta') pada jadwal tertentu kalau sebagian tugas memakai zona waktu berbeda.
Dua pengaman yang wajib untuk tugas production: withoutOverlapping() mencegah tugas yang sama berjalan dobel saat eksekusi sebelumnya belum selesai, dan onFailure() memberi tahu kamu saat tugas gagal:
Bagaimana cara membuat perintah Artisan sendiri untuk tugasmu?
Tugas terjadwal butuh perintah Artisan yang bisa dipanggil. Buat dengan:
Lalu isi method handle() dengan logika tugasmu — query invoice yang jatuh tempo 3 hari lagi, kirim notifikasi, catat ke log. Daftarkan di scheduler:
Prinsip praktis dari pengalaman: satu command untuk satu tugas, beri nama yang menjelaskan aksinya (laporan:harian, bukan cron1), dan selalu tulis log (Log::info(...)) supaya kamu bisa menelusuri apa yang terjadi tanpa menebak-nebak.
Bagaimana cara memasang cron-nya di cPanel shared hosting?
Ini satu-satunya langkah yang dilakukan di server, dan hanya sekali:
- Login ke cPanel, buka menu Cron Jobs.
- Pada Common Settings pilih Once Per Minute ( * * * *)*.
- Isi kolom Command dengan:
- Kosongkan kolom email notifikasi, lalu klik Add New Cron Job.
Tiga hal yang paling sering salah di langkah ini:
- Path PHP.
/usr/local/bin/phpumum di cPanel, tapi sebagian hosting memakai/usr/bin/phpatau path versi spesifik seperti/opt/cpanel/ea-php83/root/usr/bin/php. Pastikan versi PHP CLI sama dengan versi PHP yang dipakai websitemu — beda versi bisa membuat scheduler gagal diam-diam. Cara cek: menu Terminal di cPanel (jika ada) laluphp -v, atau tanya CS hosting. - Path artisan. Sesuaikan
/home/usernamekamu/public_htmldengan lokasi sebenarnya fileartisan. Kalau Laravel-mu dipasang di subfolder (mis.public_html/app), path-nya mengikuti. - Redirect output.
>> /dev/null 2>&1membuang output agar inbox tidak kebanjiran email cron. Namun sebagian hosting membatasi karakter>dan&pada kolom command — kalau cron tidak jalan sama sekali, coba hapus redirect-nya dulu untuk diagnosis.
Bagaimana cara memastikan scheduler benar-benar jalan?
Jangan percaya cron "sudah ditambahkan" sebelum terbukti. Urutan verifikasinya:
- Di lokal atau via Terminal cPanel, jalankan
php artisan schedule:list— pastikan tugasmu tampil dengan jadwal yang benar. - Jalankan
php artisan schedule:test, pilih tugasmu, dan jawab "yes" — perintah ini mengeksekusi tugas seolah jadwalnya tiba, tanpa menunggu. - Untuk simulasi real-time di lokal,
php artisan schedule:workmenjalankan scheduler tiap menit di foreground — berguna sebelum deploy. - Di server, buat satu tugas uji
->everyMinute()yang menulis ke log (Log::info('scheduler jalan: '.now())), tunggu 2–3 menit, lalu cekstorage/logs/laravel.log. Kalau baris log muncul tiap menit, scheduler-mu hidup. Hapus tugas uji setelahnya.
Apa masalah umum cron Laravel di shared hosting?
| Gejala Kemungkinan penyebab Solusi | ||
| Cron terdaftar tapi log tidak pernah terisi | Path PHP atau path artisan salah | Cek php -v di Terminal cPanel; samakan versi PHP CLI dengan versi web |
| Cron jalan sekali lalu berhenti | Hosting membatasi cron minimal 15 menit | Wajar di paket murah; pindahkan tugas kritis ke interval ≥ 15 menit atau naik ke VPS |
| Inbox penuh email tiap menit | Kolom email cron terisi + tanpa redirect output | Kosongkan email atau pakai >> /dev/null 2>&1 |
Error argc/argv atau command tidak dikenali | Direktif register_argc_argv mati di PHP CLI hosting | Tambahkan -d register_argc_argv=On setelah path php |
| Tugas dobel/bertabrakan | Tugas lama belum selesai saat jadwal berikutnya tiba | Tambahkan ->withoutOverlapping() |
| Queue tidak terkirim-kirim | Tidak ada worker persisten di shared hosting | Jadwalkan queue:work --stop-when-empty tiap menit sebagai pengganti supervisor |
Satu trik dari praktisi untuk hosting yang rewel: kalau perintah dengan redirect gagal total, ganti command menjadi skrip shell kecil yang kamu upload sendiri — sebagian panel lebih toleran pada pemanggilan file .sh daripada karakter khusus di kolom command.
Kapan cara ini tidak cocok untukmu?
Jujur saja: scheduler + cron shared hosting bukan untuk semua kebutuhan. Cara ini tidak cocok jika kamu butuh presisi di bawah satu menit, menjalankan ribuan job per menit, atau butuh worker queue yang selalu hidup (di shared hosting tidak ada Supervisor; solusinya queue:work --stop-when-empty tiap menit, yang tetap punya jeda). Untuk kebutuhan itu, VPS seperti pada panduan deploy Laravel ke VPS Ubuntu adalah langkah naik yang tepat.
Sebaliknya, untuk kebutuhan klasik pemilik source code — backup otomatis harian (lihat panduan backup otomatis Laravel), kirim email antrian lewat queue, pengingat tagihan via notifikasi WhatsApp otomatis — satu baris cron ini sudah lebih dari cukup. Kalau websitemu baru naik ke shared hosting, pastikan dulu proses deploy ke shared hosting via cPanel-nya beres dan tidak ada error 500 sebelum mengaktifkan scheduler.
FAQ
Apakah saya butuh akses SSH untuk cron Laravel di shared hosting? Tidak. Seluruh pengaturan dilakukan lewat menu Cron Jobs di cPanel. SSH hanya mempermudah diagnosis (cek php -v, baca log), bukan syarat.
Berapa entri cron yang dibutuhkan untuk 10 tugas terjadwal? Satu. Hanya schedule:run tiap menit; kesepuluh tugas didaftarkan di routes/console.php.
Apakah scheduler Laravel 10 berbeda dengan Laravel 11/12/13? Ya, di lokasi pendaftaran: Laravel 11+ memakai routes/console.php, Laravel 10 ke bawah memakai app/Console/Kernel.php. Perilaku dan perintah schedule:run-nya sama.
Kenapa cron saya jalan di lokal tapi tidak di hosting? Tiga penyebab paling umum: path PHP CLI berbeda versi, path file artisan salah, atau hosting memblokir karakter redirect >> /dev/null 2>&1. Cek satu per satu sesuai tabel troubleshooting di atas.
Apakah cron tiap menit membebani shared hosting? schedule:run yang tidak menemukan tugas jatuh tempo selesai dalam hitungan milidetik — bebannya bisa diabaikan. Yang membebani adalah tugasnya sendiri, jadi jadwalkan tugas berat (backup besar, laporan) di jam sepi seperti 02:00.
Bisakah scheduler mengirim notifikasi kalau tugas gagal? Bisa. Pakai ->onFailure() untuk logika custom atau ->emailOutputOnFailure('admin@tokomu.id') untuk email otomatis saat output tugas mengandung error.
Artikel Terkait
WordPress 7.1.3 Rilis 6 Oktober 2026: 7 Patch Keamanan — Dua Rilis Darurat dalam 2 Minggu
25 Oct 2026
WordPress 7.2 Beta 1 Rilis 20 Oktober 2026: Fitur Baru & Checklist Uji Tema-Plugin Sebelum Final 8 Desember
25 Oct 2026
PHP2Shell: Celah Keamanan PHP CVSS 9.2 — Update ke 8.4.27, 8.3.36, atau 8.2.35 Sekarang
23 Oct 2026
Cara Membuat Fitur Pencarian Produk di Laravel: dari LIKE ke Full-Text Search (Panduan 2026)
21 Oct 2026