Laravel memiliki fitur penjadwalan untuk dapat mengeksekusi fungsi tertentu, seperti hapus database secara berkala atau yang sebagainya. Langkahnya adalah membuat sebuah command yang caranya dapat kamu lihat di sini ( Artisan Console — Laravel 11.x — The PHP Framework For Web Artisans ).
Fokus blog ini adalah implementasinya pada VPS panel kamu, disini saya menggunakan Cyberpanel sebagai panel VPS saya.
Contohnya kita punya command untuk menghapus data notifikasi berkala dengan kode berikut
class DeleteNotificationData extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'cleanup:notification-data';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Menghapus data notifikasi 1 minggu yg lalu';
/**
* Execute the console command.
*/
public function handle()
{
Notification::where('created_at', '<', now()->subWeek())->delete();
Log::info('hapus notifikasi');
}
}
Lalu kita daftarkan command tersebut kepenjadwalan laravel di console.php
Schedule::command('cleanup:notification-data')->weekly();
Banyak tutorial yang menggunakan akan menggunakan script ini untuk diatur pada cyberpanel
* * * * * cd /home/learning.id/public_html && php artisan schedule:run >> /dev/null 2>&1
Script diatas bekerja dengan cara mengeksekui php artisan schedule:run setiap menit ( * * * * * ). laravel akan cek apakah command yang didaftarkan pada console.php akan dieksekusi sesuai rentang waktu tertentu.
Fokusnya adalah php artisan schedule:run akan dieksekusi setiap menitnyaa.
Daripada memanggil schedule:run setiap menitnya, lebih baik kita langsung saja panggil command sesuai penjadwalan cron jobnya seberti kode dibawah
0 0 * * 0 cd /home/learning.id/public_html && php artisan cleanup:notification-data
Kode diatas akan mengekseksui command php artisan cleanup:notification-data mingguan/weekly ( 0 0 * * 0), ini lebih efektif karena command akan dieksekusi pada waktu tertentu yang dijadwalkan langsung oleh Cyberpanel. Tidak perlu mengeksekusi php schedule:run setiap menitnya