Thay vì rải nhiều dòng cron rối rắm trên server, Laravel cho định nghĩa lịch chạy bằng code trong routes/console.php (hoặc schedule() của Kernel ở bản cũ).
Điểm mấu chốt: chỉ cần một entry cron duy nhất trên server chạy mỗi phút, còn lại Laravel tự quyết task nào đến hạn:
cron
* * * * * cd /path && php artisan schedule:run >> /dev/null 2>&1php
Schedule::command('report:generate')
->dailyAt('01:00')
->withoutOverlapping(); // không cho lần chạy mới chồng lên lần trước
Schedule::command('emails:send')->everyFiveMinutes();Các modifier hữu ích:
- withoutOverlapping() — chặn chạy chồng khi task trước chưa xong.
- onOneServer() — môi trường nhiều server, chỉ một server chạy task.
- runInBackground(), và hook before()/after().
Dev local dùng php artisan schedule:work để mô phỏng cron mà không cần cấu hình crontab.