Junior: питання на співбесіді з теми «Scheduling»
Найпопулярніші питання з реальних Laravel/PHP співбесід для всіх рівнів
Всі теми
API
Artisan
Authentication
Authorization
Blade
Broadcasting
Caching
Collections
Database
Debugging
Eloquent
Enums
Filament
Files
HTTP та Request
Mail
Middleware
MVC та архітектура
Notifications
Pagination
PHP
Queues
Routing
Scheduling
Search
Seeder
Service Container
Testing
Архітектура
Безпека
Валідація
Конфігурація
Локалізація
Міграції
Сесії
1 питання
Розклад описується в PHP, а не в crontab - тож він лежить у git разом із кодом.
Опис завдання у routes/console.php:
use Illuminate\Support\Facades\Schedule;
Schedule::command('vacancies:parse')->twiceDaily(6, 18);
Schedule::command('reports:send')->dailyAt('09:00');
Schedule::job(new CleanupTempFiles)->hourly();
Що потрібно на сервері - один запис у cron:
* * * * * cd /path-to-project && php artisan schedule:run >> /dev/null 2>&1
Саме так: щохвилини й один рядок на весь застосунок. Cron будить Laravel щохвилини, а той сам вирішує, чиє зараз час. Новий пункт розкладу не потребує змін у cron.
Перевірити, не чекаючи часу:
php artisan schedule:list # що і коли має виконатися
php artisan schedule:run # виконати те, чому час зараз
php artisan schedule:work # тримати планувальник локально, без cron
Типові помилки новачка:
- Прописати кожне завдання окремим рядком у crontab - тоді розклад із коду не працює зовсім.
- Забути
cdу шлях проєкту: команда не знайде застосунок. - Запускати від імені іншого користувача, ніж веб-сервер, - права на
storageне збігаються, і завдання падає на записі логу. - Не дивитися на вивід: без
emailOutputOnFailure()чи логування падіння завдання непомітне.