Розклад описують у routes/console.php ланцюжком методів:
Schedule::command('reports:send')
->weekdays()
->at('9:00')
->timezone('Europe/Kyiv');
Schedule::command('cache:prune-stale-tags')->hourly();
Schedule::job(new SyncRates)->everyFifteenMinutes()->between('8:00', '20:00');
Schedule::command('backup:run')->dailyAt('3:30')->environments(['production']);
Schedule::command('invoices:remind')->daily()->when(fn () => Setting::get('reminders_on'));
Групи методів:
- частота:
everyMinute(),everyFiveMinutes(),hourly(),daily(),weekly(),monthlyOn(1, '8:00'),cron('0 */6 * * *'); навітьeverySecond(); - дні:
weekdays(),weekends(),mondays(),days([1, 3]); - час:
between(),unlessBetween(); - умови:
when(),skip(),environments(); - пояс:
timezone()для завдання чиschedule_timezoneуconfig/app.phpдля всіх.
Пастка з поясом: якщо час сервера UTC, а бізнес у Києві, dailyAt('9:00') без поясу спрацює о 11 чи 12 за київським. З переходом на літній час завдання в проміжку 3:00-4:00 можуть пропуститися чи виконатися двічі - критичні запускають поза ним.
php artisan schedule:list показує, коли кожне завдання виконається наступного разу.